Within my controller specs I am stubbing out valid? for some routing tests, (based on Ryan Bates nifty_scaffold) as follows :-
it "create action should render new template when model is invalid" do
Company.any_instance.stubs(:valid?).returns(false)
post :create
response.should render_template(:new)
end
This is fine when I test the controllers in isolation. I also have the following in my model spec
it "is valid with valid attributes" do
@company.should be_valid
end
Again this works fine when tested in isolation. The problem comes if I run spec for both models and controllers. The model test always fails as the valid? method has been stubbed out. Is there a way for me to remove the stubbing of any_instance when the controller test is torn down.
I have got around the problem by running the tests in reverse alphabetic sequence to ensure the model tests run before the controllers but I really don't like my tests being sequence dependant.
You need to manually configure RSpec.
Also, remember that Rspec provides its own methods to mock an object. Use the RSpec API or you won't be able to benefit from library abstraction. http://rspec.info/documentation/mocks/message_expectations.html
I'm having the same issue but not using
Rspec
but normalTest::Unit
, actuallyActionController::TestCase
.The defined expectations are keeping alive among the tests.
Is there any clue how can I reset my expectations between tests?
Updated: I have solved this with the
unstub
Mocha method: http://mocha.rubyforge.org/classes/Mocha/ObjectMethods.html#M000009Does your spec_helper contain
With that rspec should tear down mocks between tests.