Thanks for your reply Ben. +1 on your wording recommendation - I understand and agree 100%
However - for me - the Background block executes before each example in the table. Therefore, the database is cleared twice, and the second example ('duplicate userid') fails. (Cucumber 0.3.1 / ruby 1.8.7 (2008-08-11 patchlevel 72) [i386-cygwin]) Here are some snippets from a little workaround that i've employed... in env.rb: State = {'feature_file'=>'initialize'} in my_steps.rb: unless State['feature_file'] == @__cucumber_current_step.file_colon_line.split(':').first puts "CLEANUP CODE HERE - RUN ONCE PER FEATURE FILE --------" end State['feature_file'] = @__cucumber_current_step.file_colon_line.split(':').first I'm sure there must be a better way! I am still learning cucumber so any advice is welcome! ;-) On Apr 28, 11:28 am, Ben Mabey <b...@benmabey.com> wrote: > Arco wrote: > > I'd like to do this: > > > Feature: user signup > > Before: > > Given I have a cleaned up database > > Scenario Outline: Sign Up > > Given I am on the signup page > > When I sign up using <userid> > > Then I should see <message> > > Examples: > > |userid |message | > > |userX |successful signup | > > |userX |duplicate userid | > > > "I have a cleaned up database" runs before every example, making the > > second example ('duplicate userid') fail. > > You could use Background and it would work just like you want it to: > > Feature: user signup > Background: > Given I have a cleaned up database > Scenario Outline: Sign Up > Given I am on the signup page > When I sign up using <userid> > Then I should see <message> > Examples: > |userid |message | > |userX |successful signup | > |userX |duplicate userid | > > However, I would not encourage this. You should try to avoid using technical > words, such as database, in your features. If anything you could say "Given > no users exist" or something like that. Keeping your database clean is > something you generally want for every scenario though. So I would suggest > putting the code in your "Given I have a cleaned up database" code into a > Before block. The wiki has a page on using the Before > hook:http://wiki.github.com/aslakhellesoy/cucumber/hooks > > Basically, in your env.rb file you will add something like: > > Before do > Database.clean! # or however you clean your DB > end > > HTH, > Ben > > > > > On Apr 28, 9:38 am, aslak hellesoy <aslak.helle...@gmail.com> wrote: > > >> On Tue, Apr 28, 2009 at 6:15 PM, Arco <akl...@gmail.com> wrote: > > >>> OK - I found a workaround. I simply tag the first scenario with > >>> '@first', then > >>> do Before('@first') and i get what I want - executing a block once for > >>> the feature file. > > >>> Except for one problem: most of my scenarios are done as scenario > >>> outlines, which > >>> are run multiple times - once for each row of my Example table. > > >>> A workaround to that problem might be to put a 'dummy' scenario that > >>> is run before the other scenarios in my feature file... > > >>> �...@first > >>> Scenario: Call a before block before running other scenarios... > > >>> But this puts junk in my feature files. Is there a better, cleaner > >>> way?? > > >> a) Why do you need one thing to happen before a feature? > >> b) Why can't you do it before each scenario? > > >> Aslak > > >>> On Apr 28, 8:32 am, Arco <akl...@gmail.com> wrote: > > >>>> I also would like a hook that executes a block once before running a > >>>> feature file. > > >>>> In my testing i found that: > >>>> - Background: executes before each scenario > >>>> - Before executes before each scenario > >>>> - Before('@tag') executes before each scenario > > >>>> Is there a way to execute a block once before each feature, but not > >>>> before each scenario? > > >>>> On Apr 28, 7:08 am, aslak hellesoy <aslak.helle...@gmail.com> wrote: > > >>>>>> Hi -- is it possible to set before and after blocks for individual > > >>> feature > > >>>>>> files? > > >>>>> Yes. Use tagged hooks: > > >>>http://wiki.github.com/aslakhellesoy/cucumber/hooks > > >>>>> Aslak > > >>>>>> I've tried putting them in step files, but they just get called > > >>> before > > >>>>>> everything, like they'd been declared in env.rb, which is consistent > > >>> with > > >>>>>> how I thought cucumber worked, but I thought I'd best try it anyway. > >>>>>> Anyway, I have some features that require a specific state be set up > > >>> before > > >>>>>> they run -- is this possible to do, and how would I go about doing > > >>> it? > > >>>>>> Thanks for any & all help, > >>>>>> Doug. > > >>>>>> _______________________________________________ > >>>>>> rspec-users mailing list > >>>>>> rspec-us...@rubyforge.org > >>>>>>http://rubyforge.org/mailman/listinfo/rspec-users > > >>>>> _______________________________________________ > >>>>> rspec-users mailing list > >>>>> rspec-us...@rubyforge.orghttp:// > > >>> rubyforge.org/mailman/listinfo/rspec-users > > >>>> _______________________________________________ > >>>> rspec-users mailing list > >>>> rspec-us...@rubyforge.orghttp:// > > >>> rubyforge.org/mailman/listinfo/rspec-users > >>> _______________________________________________ > >>> rspec-users mailing list > >>> rspec-us...@rubyforge.org > >>>http://rubyforge.org/mailman/listinfo/rspec-users > > >> _______________________________________________ > >> rspec-users mailing list > >> rspec-us...@rubyforge.orghttp://rubyforge.org/mailman/listinfo/rspec-users > > > _______________________________________________ > > rspec-users mailing list > > rspec-us...@rubyforge.org > >http://rubyforge.org/mailman/listinfo/rspec-users > > _______________________________________________ > rspec-users mailing list > rspec-us...@rubyforge.orghttp://rubyforge.org/mailman/listinfo/rspec-users _______________________________________________ rspec-users mailing list rspec-users@rubyforge.org http://rubyforge.org/mailman/listinfo/rspec-users