[rspec-users] stale records with integration testing?

Matt Wynne matt at mattwynne.net
Fri Feb 17 07:55:48 EST 2012


On 16 Feb 2012, at 12:21, David Chelimsky wrote:

> On Thu, Feb 16, 2012 at 4:17 AM, Matt Wynne <matt at mattwynne.net> wrote:
>> 
>> On 14 Feb 2012, at 20:44, Justin Ko wrote:
>> 
>> 
>> On Feb 14, 2012, at 9:23 AM, David Chelimsky wrote:
>> 
>> On Tue, Feb 14, 2012 at 9:28 AM, Justin Ko <jko170 at gmail.com> wrote:
>> 
>> 
>> On Feb 13, 2012, at 10:35 PM, David Chelimsky wrote:
>> 
>> 
>> On Mon, Feb 13, 2012 at 9:04 PM, Justin Ko <jko170 at gmail.com> wrote:
>> 
>> 
>> On Feb 13, 2012, at 1:16 PM, Patrick J. Collins wrote:
>> 
>> 
>> Hi,
>> 
>> 
>> I was writing an integration test for my user signup form (with
>> 
>> capybara), and found that my test was failing due to a validation error:
>> 
>> "email is already taken".  I'm a bit confused because I thought when I
>> 
>> run "rspec spec/some_spec.rb", the test database would be wiped clear?
>> 
>> 
>> Is that not the case?
>> 
>> 
>> Patrick J. Collins
>> 
>> http://collinatorstudios.com
>> 
>> 
>> _______________________________________________
>> 
>> rspec-users mailing list
>> 
>> rspec-users at rubyforge.org
>> 
>> http://rubyforge.org/mailman/listinfo/rspec-users
>> 
>> 
>> You basically have two options to ensure a clean database:
>> 
>> 
>> 1.) Transactional examples:
>> 
>> 
>> RSpec.configuration.use_transactional_examples = true
>> 
>> 
>> 2.) DatabaseCleaner:
>> 
>> 
>> RSpec.configure do |config|
>> 
>> config.before { DatabaseCleaner.start }
>> 
>> config.after { DatabaseCleaner.clean }
>> 
>> end
>> 
>> 
>> Look into what those do. Let us know if you get stuck.
>> 
>> 
>> What Justin says is true if you're running in the same process. If
>> 
>> you're using Capybara to run examples in-bro.wser, then option 2 will
>> 
>> work for you, but option 1 will not.
>> 
>> 
>> You can still do this with an AR patch. Look at the "Transactions and
>> database setup" in the Capybara README.
>> 
>> 
>> "This may have thread safety implications and could cause strange
>> 
>> failures, so use caution with this approach."
>> 
>> 
>> Using DatabaseCleaner with truncation is SLOW.
>> 
>> 
>> True, but you can minimize that by using transaction by default, and
>> 
>> specifying truncation for in-browser scenarios (which are already far
>> 
>> slower than will be impacted by truncation).
>> 
>> 
>> cucumber-rails has good examples on how to set this up in RSpec:
>> https://github.com/cucumber/cucumber-rails/blob/master/lib/cucumber/rails/database.rb
>> 
>> It includes AR shared connection and truncation strategies.
>> 
>> David, how come rspec-rails doesn't include support for these things as
>> well? I don't really mind setting it up manually, but it does seem to be a
>> necessary pattern for request specs.
>> 
>> 
>> Probably because it's crazy complicated.
> 
> Seems so, but worthwhile. Also, I wasn't aware of the shared
> connection strategy before this thread.
> 
>> If you do want to support it too,
>> let's work out a way to factor it out into a single shared library.
> 
> I like this idea but am seriously overcommitted right now. Can you two
> coordinate on this?

I know how you feel, but I will try to help, yes. 

I think reading the feature is a good place to start: that's where I dumped my understanding of the problem when I last worked on it:

>> https://github.com/cucumber/cucumber-rails/blob/master/features/choose_javascript_database_strategy.feature

cheers,
Matt

--
Freelance programmer & coach
Author, http://pragprog.com/book/hwcuc/the-cucumber-book
Founder, http://www.relishapp.com/
Twitter, https://twitter.com/mattwynne


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://rubyforge.org/pipermail/rspec-users/attachments/20120217/e83b597b/attachment-0001.html>


More information about the rspec-users mailing list