Daniel Salmeron Amselem wrote:

How would you test this method? Checking the database or mocking? Is
there any advantage of using one over the other ?

Hi, Dani.

You originally wrote that you want "to check if my account object is
being destroyed." I can think of a few reasons to check this:

1. I don't yet know Rails well and want to check that I understand how #destroy works.
2. I don't trust Rails to destroy an object correctly.
3. I've configured some behavior of my object in a way that might cause Rails to destroy it differently than I expect.
4. I think I've found a bug in Rails.

Do you want to check the destroy method for one of these reasons, or something else entirely? I ask, because that information guides me to choose one of three options:

1. Check #destroy by invoking it directly.
2. Check a client by stubbing/mocking #destroy.
3. Don't check #destroy at all.

Since I didn't write #destroy, I prefer not to check it. (Principle: Don't Test The Platform.) If I don't trust #destroy, I check it by invoking it directly, because I think there might be a bug in Rails. If I don't understand what #destroy does, I check it by invoking it directly, because I'm writing Learning Tests. (Principle: Write examples to check your assumptions about how someone else's code works.)

I don't really understand the benefits of using mocks, so could you
tell me how would you write the test using both methods (mocking, and
checking the DB? Could you explain me the advantages of using mocking
and advantages of checking de DB?

I think of it this way: if I want to check #destroy, I invoke it directly with the database; but if I want to check that my code asks to destroy an object at the right time, I mock #destroy; and finally, if I want to check that my code reacts appropriately after destroying an object, then I stub #destroy. To understand some of the underlying principles, I humbly recommend this: http://jbrains.ca/integrated_tests_are_a_scam (The articles are in order from newest first, so start at the end).

Enjoy.
--
J. B. Rainsberger :: http://www.jbrains.ca ::
http://www.thecodewhisperer.com
_______________________________________________
rspec-users mailing list
rspec-users@rubyforge.org
http://rubyforge.org/mailman/listinfo/rspec-users

Reply via email to