On Feb 12, 2009, at 1:03 PM, Nick Hoffman <[email protected]> wrote:

Does RSpec automatically call #valid? on ActiveRecord models?

For instance, when this example is run:

it 'should reject a nil value' do
 @form = TimeShiftForm.new :file => nil

 puts "@form.errors.count = <<#[email protected]}>>"
 @form.should have(1).error_on :file

This matcher, have(1).error_on, does call #valid.


 puts "@form.errors.count = <<#[email protected]}>>"
end

This is printed:
@form.errors.count = <<0>>
@form.errors.count = <<1>>

However, I never called @form.valid? , which leads me to believe that RSpec called it for me.

In this case, yes, because the matcher needs that.

If RSpec does in fact call #valid? automatically, should we refrain from manually calling #valid?

The fact that you are asking this shows that we're violating the principle of least surprise. We could make it so it doesn't validate, but that would pit the onus on users to validate explicitly (not to mention the upgrade burden).

Thoughts?

David

-Nick
_______________________________________________
rspec-users mailing list
[email protected]
http://rubyforge.org/mailman/listinfo/rspec-users
_______________________________________________
rspec-users mailing list
[email protected]
http://rubyforge.org/mailman/listinfo/rspec-users

Reply via email to