El 08/07/2010, a las 18:17, Frank J. Mattia escribió: > My controller does something like this for create > @object = Object.new(params[:object]) > @object.created_by = current_user > if @object.save... yadda yadda yadda... > > I have my model spec testing for the presence of created_by but I feel > compelled to test that my controller is correctly setting current_user > on its appropriate actions. Does this seem reasonable? If so, what's > the proper way to test it?
Seems reasonable to me. You could test with either an interaction based approach (use mocks and stubs to confirm that @object receives the "created_by" message with the expected param) or a state based approach (hit the controller action and then inspect the system state afterwards to confirm that it is in the expected state). Interaction based approach: - may seem like more work due to the set-up of the mocks and stubs - runs faster because you can make it so that your controller test doesn't even hit the database - may cause you to replicate internal implementation details in your tests - may shield you from finding out about actual breakage in your system because it insulates your controller from the actual API on the real mocked/stubbed class State based approach: - may seem like less work due to easier set-up - may run slower, which can be important if you have an enormous spec suite - helps focus your specs on externally observable behavior rather than internal implementation details - couples your controller tests to your actual model instances, so breakage in your models will cause more than just model specs to fail Personally I prefer a state based approach in general, but I look at things on a case-by-case basis. Generally if I pick the wrong one I soon find out about it because the specs I end up writing are stomach-churning. And there is a feedback loop here too: if _both_ of these approaches seem difficult, then it is a sign that the code you're testing could probably be rethought to make it more easily testable. Cheers, Wincent _______________________________________________ rspec-users mailing list rspec-users@rubyforge.org http://rubyforge.org/mailman/listinfo/rspec-users