[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