AfterCurrentScenario block


#1

Is there currently a way to register a block to run after the current
scenario completes?

If not, we’ve implemented one. Would anyone be interested in us
submitting it as a patch to Cucumber?

Something like

Given “something that will not be rolled back after the scenario is
finished” do
original = SomeClass.a_value
SomeClass.a_value = 7

AfterCurrentScenario do
# undo stuff
SomeClass.a_value = original
end
end

If you’re interested, our use case is for pagination, where we
explicitly set the length of a page to something much shorter than the
default in a step, so that we only have to create a small number of
objects to spill over onto another page. The page length value is set
on a class variable, and would pollute other tests, so we want to
reset it when the scenario is finished.

e.g. Given the maximum number of Users to display is 2
And there are 3 Users
When I view the Users page
Then I should see the text “see all 3 users”

Matt W.
http://blog.mattwynne.net
http://www.songkick.com


#2

Den 17. april. 2009 kl. 18.06 skrev Matt W. removed_email_address@domain.invalid:

Is there currently a way to register a block to run after the
current scenario completes?

After.

If not, we’ve implemented one. Would anyone be interested in us
submitting it as a patch to Cucumber?

How is this different from After?

Aslak


#3

On Fri, Apr 17, 2009 at 9:06 AM, Matt W. removed_email_address@domain.invalid wrote:

If you’re interested, our use case is for pagination, where we explicitly
set the length of a page to something much shorter than the default in a
step, so that we only have to create a small number of objects to spill over
onto another page.

Is this necessary? I mean, is the page length so long that creating
that many objects takes appreciably longer than otherwise?

I like to leave such values as page length alone in a scenario,
because that’s part of the user requirement (if not a vitally
important one).

///ark


#4

On Fri, Apr 17, 2009 at 12:31 PM, Aslak
Hellesøyremoved_email_address@domain.invalid wrote:

Den 17. april. 2009 kl. 18.06 skrev Matt W. removed_email_address@domain.invalid:

Is there currently a way to register a block to run after the current
scenario completes?

After.

After is used after any scenario completes thought, right? If you
add an After block inside of a step definition, it’s going to be
executed from that point on, rather than clear out at the end of the
scenario that ran it, correct?

If not, we’ve implemented one. Would anyone be interested in us submitting
it as a patch to Cucumber?

How is this different from After?

  • It clears out after the current scenario.
  • It doesn’t require to be run for scenarios that don’t need it.
  • It allows you to cleanly place the handler next to the code that it
    is so closely related
  • It doesn’t require you know the name of the scenario(s) that would
    need it (it’s simply determined by if a step definition is run)

AfterCurrentScenario do
finished.


rspec-users mailing list
removed_email_address@domain.invalid
http://rubyforge.org/mailman/listinfo/rspec-users


rspec-users mailing list
removed_email_address@domain.invalid
http://rubyforge.org/mailman/listinfo/rspec-users


Zach D.
http://www.continuousthinking.com
http://www.mutuallyhuman.com


#5

Den 17. april. 2009 kl. 18.58 skrev Zach D. removed_email_address@domain.invalid:

After.

After is used after any scenario completes thought, right? If you
add an After block inside of a step definition, it’s going to be

Aha now I understand. Matt, would Joseph’s suggestion work for you?

Aslak


#6

On 17 Apr 2009, at 18:20, Aslak Hellesøy wrote:

scenario completes?

After.

After is used after any scenario completes thought, right? If you
add an After block inside of a step definition, it’s going to be

Aha now I understand. Matt, would Joseph’s suggestion work for you?

Aslak

It would work, yes, but I have to say I like ours a bit better - you
can put the undo code right next to the code it’s undoing, as Zach
pointed out. With the tags thing I’d have to put a tag in the feature
file which is introducing a tiny bit more coupling and noise which I’d
rather avoid.

I had pondered on the idea of changing the After method to use a
syntax a bit like RSpec’s #before(:each) where we could say:

After(:each) do

general post-scenario clean-up

After(:current) do

one-time clean-up

Anyway, just a thought.

Matt W.
http://blog.mattwynne.net
http://www.songkick.com


#7

Matt W. wrote:

Is there currently a way to register a block to run after the current
scenario completes?

You could achieve the same thing with After and tags:

http://wiki.github.com/aslakhellesoy/cucumber/hooks

@please-clean-me
Scenario: dirty

After “@please-clean-me” do
#clean
end


Joseph W.
http://blog.josephwilk.net