[rspec-users] Database clearing
todd at snappl.co.uk
Fri Sep 19 13:37:10 EDT 2008
On Fri, Sep 19, 2008 at 5:34 PM, Pat Maddox <pergesu at gmail.com> wrote:
> No, that is not correct. Here's how transactional fixtures work:
> 1. Before all specs run, load the fixtures into the database
> 2. Start a transaction. Run the first spec
> 3. Rollback transaction
> 4. Start another transaction. Run the second spec
> 5. Rollback transaction
> And that's it. The transaction part is basically a hack to repopulate
> the db more quickly...instead of doing a bunch of inserts before each
> example, you just rollback the transaction so the fixtures are clean
> again. This has the effect of bleeding DB data into other example
> groups if you're not careful (Mark: does that help to explain the
> acerbic comments?).
> To my knowledge, there are three main choices:
> 1. Delete stuff before example
> 2. Load the fixtures for whatever model you're specifying, and just deal
> with the fact that there's stuff in there
> 3. Don't use Rails db fixtures
> I've long been using #3. There are a couple reasons why, in addition to
> the problem you're experiencing. The first is that I like to do as much
> of the setup close to the exaple as possible. Creating a user in my
> 'before' means I don't have to look very far to see/understand/modify
> the data being used in a particular example. And the second reason is
> that when you use db fixtures, every example that uses them becomes
> coupled. Things will be going fine for a while, and then you have to
> change the fixture to support one thing, and then a bunch of other
> example start failing as a result.
> There's another approach though that I haven't tried yet. One of the
> guys I work with truncates all the tables in the db before every
> example. He says this runs as fast or faster than transactional
> fixtures, and has the added benefit of NOT being in a transaction, which
> means that if he actually DOES use a transaction in his application code
> then he can test it very easily. I've not tried it, but it seems like a
> cool idea.
Pat, fantastic! Thanks for that! Never having had problems with fixtures
before (HA! Who am I kidding? Never having had THIS problem before) I was
at a loss. Your colleague's truncate trick sounds like a fantastic idea.
I'll give it a go straight away.
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the rspec-users