在黄瓜的proc中修改实例变量绕钩

时间:2011-05-08 02:38:46

标签: ruby cucumber

使用黄瓜时,我引用步骤定义中使用的实例变量,例如

Given /^I have an instance variable in my step$/ do
  @person.should_not be_nil
end

使用Before hook例如

在我的env.rb中使用getter
class Person
  def be_happy
    puts "smiling"
  end
end

person = Person.new

Before do
  @person = person
end

到目前为止一切都很好......

但是如果我想使用一个Around钩子,我的理解是它产生一个proc,我可以从中调用该步骤中的块。

Around do |scenario, block|
  @person = person
  block.call
end

但这失败了,因为@person是零。这是因为@person在创建proc时被实例化,因此无法修改。有没有办法做到这一点?

1 个答案:

答案 0 :(得分:0)

想到两个解决方案

使用世界

尝试使用World,也许在env.rb中使用类似的东西:

class Person
  def be_happy
    puts "smiling"
  end
end

World do
  Person.new
end

Around do |scenario, block|
  block.call
end

然后你的步骤def应该做更像的事情:

Given /^I have an instance variable in my step$/ do
  be_happy.should eql("smiling")
end

通过这种方法,您可以在每个场景中获得一个新的分支,这可能是一件好事。

使用常量 如果您不想为每个场景使用全新的Person,只需使用常量,也许是这样:

class Person
  def be_happy
    "smiling"
  end
end

MyPerson = Person.new

Around do |scenario, block|
  block.call
end

步骤def如此:

Given /^I have an instance variable in my step$/ do
  MyPerson.be_happy.should eql("smiling")
end