Изменение переменной экземпляра в процедуре в огурце вокруг хука - PullRequest
2 голосов
/ 08 мая 2011

При использовании огурца я ссылаюсь на переменную экземпляра, используемую в определении шага, например,

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

С помощью геттера в моем env.rb, используя хук До, например,

class Person
  def be_happy
    puts "smiling"
  end
end

person = Person.new

Before do
  @person = person
end

Всепока все хорошо ...

Но если я хочу вместо этого использовать ловушку Around, я понимаю, что это дает процесс, из которого я могу вызвать блок, который был на шаге, например

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

Но это не так, поскольку @person равен нулю.Это потому, что @person создается при создании proc и поэтому не может быть изменен.Есть ли способ сделать это?

1 Ответ

0 голосов
/ 25 сентября 2012

На ум приходят два решения

Использование мира

Попробуйте использовать Мир , возможно, что-то подобное в 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

При таком подходе вы получаете ветку нового персонажа для каждого сценария, что, вероятно, хорошо.

Использование константы В случае, если вы не хотите, чтобы новый Персона для каждого сценария, просто используйте константу, возможно, вот так:

class Person
  def be_happy
    "smiling"
  end
end

MyPerson = Person.new

Around do |scenario, block|
  block.call
end

с step defвот так:

Given /^I have an instance variable in my step$/ do
  MyPerson.be_happy.should eql("smiling")
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...