Modifying instance variable in a proc in cucumber Around hook
When using cucumber, I reference an instance variable used in a step definition e.g.
Given /^I have an instance variable in my step$/ do
  @person.should_not be_nil
end
With a getter in my env.rb using the Before hook e.g.
class Person
  def be_happy
    puts "smiling"
  end
end
person = Person.new
Before do
  @person = person
end
All good so far ...
But if I want to use an Around hook instead, my understanding is that it yields a proc from which I can call the block that was in the step e.g.
Around do |scenario, block|
  @person = person
  block.call
end
But this fails, as @person is nil. Is this because @person is instantiated when the proc is created, and thus cannot be modified. Is there a w开发者_C百科ay to do this?
Two solutions come to mind
Using a World
Try using World, perhaps with something like this in env.rb:
class Person
  def be_happy
    puts "smiling"
  end
end
World do
  Person.new
end
Around do |scenario, block|
  block.call
end
And your step def should then do something more like:
Given /^I have an instance variable in my step$/ do
  be_happy.should eql("smiling")
end
With this approach, you get a branch new Person every scenario, which is probably a good thing.
Using a Constant In the event you don't want a brand new Person for every scenario, just use a constant, perhaps like so:
class Person
  def be_happy
    "smiling"
  end
end
MyPerson = Person.new
Around do |scenario, block|
  block.call
end
with step def like so:
Given /^I have an instance variable in my step$/ do
  MyPerson.be_happy.should eql("smiling")
end
 
         加载中,请稍侯......
 加载中,请稍侯......
      
精彩评论