[rspec-users] Cucumber/Webrat fails to find fields when run after specs

Christopher Bailey chris at cobaltedge.com
Thu Feb 5 05:33:07 EST 2009


Data before is nothing.  I'm not sure why there's data after.
I would clear the data before running Cucumber, but after running specs by
doing a "rake db:reset" or similar, but it has no effect, because that's the
same task that started off the whole thing.  I'm running this under
CruiseControl and so you set up a cruise task, which looks like:

task :cruise do
  RAILS_ENV = ENV['RAILS_ENV'] = 'test'
  CruiseControl::invoke_rake_task 'db:reset'
  CruiseControl::invoke_rake_task 'cruise_coverage'
  CruiseControl::invoke_rake_task 'db:reset'    # This one has no effect
  CruiseControl::invoke_rake_task 'features'
  CruiseControl::invoke_rake_task 'ci_tag'
end

I've marked it as you can see, where that second db:reset has no effect
(because Rake thinks it has already run it (which it has) above).  I've
tried doing things like making the "features" rake task itself depend on
db:reset, or depend on a custom task that does a db:reset, etc., but while
you see CruiseControl spit out that it's supposed to do that task, the task
never gets run.  This is the same behavior if you do it simply with
something like:

task :twotest do
  Rake::Task['db:reset'].invoke
  puts "do it again..."
  Rake::Task['db:reset'].reenable     # this doesn't appear to work
  Rake::Task['db:reset'].invoke
end

That will only run it once.  I can resort to doing a shell command, but what
a hack, seems like there has to be better way.

On Thu, Feb 5, 2009 at 1:23 AM, aslak hellesoy <aslak.hellesoy at gmail.com>wrote:

> On Thu, Feb 5, 2009 at 1:43 AM, Christopher Bailey <chris at cobaltedge.com>
> wrote:
> > On Wed, Feb 4, 2009 at 12:54 PM, aslak hellesoy <
> aslak.hellesoy at gmail.com>
> > wrote:
> >>
> >> On Wed, Feb 4, 2009 at 7:21 PM, Christopher Bailey <
> chris at cobaltedge.com>
> >> wrote:
> >> > I've been battling the strangest behavior, and hoping someone can shed
> >> > some
> >> > light...
> >> > I am using RSpec for MVC tests, and then Cucumber for
> stories/features.
> >> >  I
> >> > am new to Cucumber, and recently finished converting our RSpec Story
> >> > Runner
> >> > suite to it.  What I'm seeing is that if I clean the database (e.g.
> rake
> >> > db:reset), then run all my specs, then run the features, Webrat fails
> to
> >> > find various fields on form pages.  If I run them in the reverse
> order,
> >> > with
> >>
> >> Use puts response.body in the failing step definitions to see the html
> >
> > I'll do that (can't at the moment, but will next go-around).
> >
> >>
> >> > features first, then specs, often times various specs fail (seems
> >> > somewhat
> >> > random and odd in what may fail).
> >>
> >> Sounds like you have residual data in your test database. Do you have
> >> transactions turned on for both rspec and cucumber?
> >> Do your features rely on specific data being in the database before
> >> the run? How do you get it in there?
> >
> > I start with a clean DB, then run the specs.  At the end, data is left in
>
> That's probably the source of your problem. Either fix it so that data
> in DB after specs == data before. Or if you can't do that - clear the
> db before running cucumber.
> You can invoke a Rake task explicitly with something like
> Task['taskname'].invoke
>
> Aslak
>
> > there.  I am running transactional RSpec specs as far as I know, although
> > maybe there's something explicit I need to do?  I thought they were on by
> > default.  I've noticed that data gets leftover between tests a lot.  I
> see
> > that I have transactional fixtures enabled (I don't use any fixtures
> though
> > - all my data is created by my own factory methods/generators which are
> > either run in before methods or in the actual spec case).  I have
> Cucumber
> > transactional turned on via this line in env.rb:
> > Cucumber::Rails.use_transactional_fixtures
> > No features rely on any pre-existing data.
> >
> >>
> >> Aslak
> >>
> >> > I believe that if I clean the database between each, that things work.
> >> >  I
> >> > did not previously have to do that with story runner.  But, also, what
> >> > I'm
> >> > finding is that I can't seem to run rake db:reset twice in the same
> rake
> >> > task (due to Rake's usual not allowing that), so this makes setting up
> a
> >> > rake task for CruiseControl.rb hard, as it won't reset the DB a second
> >> > time.
> >> >  I could probably just run it as a shell command, but that seems like
> a
> >> > terrible hack.
> >> > I'm running into this both on MacOS X, and on my CI server which is
> >> > Ubuntu
> >> > 8.04 running CruiseControl.rb
> >> > (from git://github.com/benburkert/cruisecontrolrb.git).  Has anyone
> else
> >> > seen this kind of thing, any ideas?  My versions:
> >> > ruby 1.8.6 (2008-03-03 patchlevel 114) [universal-darwin9.0]
> >> > rails (2.2.2)
> >> > rspec (1.1.11)
> >> > rspec-rails (1.1.11)
> >> > aslakhellesoy-cucumber (0.1.99.19)
> >> > nokogiri (1.1.1)
> >> > webrat (0.4.1)
> >> > --
> >> > Christopher Bailey
> >> > Cobalt Edge LLC
> >> > http://cobaltedge.com
> >> >
> >> > _______________________________________________
> >> > rspec-users mailing list
> >> > rspec-users at rubyforge.org
> >> > http://rubyforge.org/mailman/listinfo/rspec-users
> >> >
> >>
> >>
> >>
> >> --
> >> Aslak (::)
> >> _______________________________________________
> >> rspec-users mailing list
> >> rspec-users at rubyforge.org
> >> http://rubyforge.org/mailman/listinfo/rspec-users
> >
> >
> >
> > --
> > Christopher Bailey
> > Cobalt Edge LLC
> > http://cobaltedge.com
> >
> > _______________________________________________
> > rspec-users mailing list
> > rspec-users at rubyforge.org
> > http://rubyforge.org/mailman/listinfo/rspec-users
> >
>
>
>
> --
> Aslak (::)
> _______________________________________________
> rspec-users mailing list
> rspec-users at rubyforge.org
> http://rubyforge.org/mailman/listinfo/rspec-users
>



-- 
Christopher Bailey
Cobalt Edge LLC
http://cobaltedge.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://rubyforge.org/pipermail/rspec-users/attachments/20090205/bd7e0a01/attachment-0001.html>


More information about the rspec-users mailing list