[rspec-users] RSpec and Factory Girl: Destroying an object

J. B. Rainsberger jbrainsberger at gmail.com
Fri May 14 20:19:54 EDT 2010


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


More information about the rspec-users mailing list