I’m testing some named scopes. I use be_all(&:some_predicate) to test
if all the elements in the collection are valid, which works, but when
I try to test the inverse, it fails.
subject = User.active
subject.should be_all(&:active) # works
inverse = User.all - subject
inverse.none?(&:active).should be_true # works
inverse.should be_none(&:active) # doesn’t work
And also “inverse.should_not be_any(&:active)” doesn’t work either
And I cannot figure out why. The RDoc of rspec or rspec-rails don’t
mention be_none or be_any, so I would think that this would be
straightforward. Anyone any ideas?
subject = User.active
straightforward. Anyone any ideas?
I’m not certain, but I think that the problem is the way you’re
setting up the factories. Try just creating the objects directly and
see what happens:
rspec-users mailing list [email protected]://rubyforge.org/mailman/listinfo/rspec-users
Nope, no difference.
The arrays with records are all fine when I inspect them, just as I
would expect.
The message “expected any? to return false” looks okay, so the only
thing I can imagine is that it doesn’t send it to the right receiver.
I’ve made an inverse selection too, where I match be_any on subject,
but to no avail.
I’ve also tried it without named_scopes, again not changing the
situation.
But then again, why should “all?” work, but “any?” or “none?” not?
I use be_all(&:some_predicate) to test if all the elements in the
collection are valid, which works, but when I try to test the
inverse, it fails.
I’m not certain, but I think that the problem is the way you’re
setting up the factories.
I don’t think be_all(&:some_predicate) actually works at all, except
in the accidental sense that Enumerable#all indiscriminately returns
true as long as all of the entries in the collection are truthy.
At the moment it looks like dynamic predicate matchers like be_all
completely ignore their block argument (&:some_predicate doesn’t get
rolled into *args) so you just get the default blockless behaviour of
the underlying predicate.