Могут ли макеты и заглушки сохраняться между шагами Cucumber?

У меня есть приложение, использующее сторонний API под названием PSC, но я хочу изолировать свои тесты на огурце от вызовов API в PSC.

Итак, я написал пару огуречных шагов:

When /^we pretend that PSC is up$/ do
  PscV1.default_psc_connection("test user").stub!(:default_connection_is_up?).and_return(true)
end

When /^we pretend like PSC assignments exist for all subjects$/ do
  PscV1.default_psc_connection("test user").stub!(:assignment_exists?).and_return(true)
end

... и что эти заглушки должны делать, так это заставить сценарий Cucumber думать, что вызовы API работают. Однако кажется, что заглушки не сохраняются между шагами, поэтому дальнейшие шаги в моем сценарии не получают заглушенных возвращаемых значений, они пытаются выполнить фактический вызов API и, следовательно, терпят неудачу.

Есть ли способ заставить заглушки сохраняться, по крайней мере, в течение всего сценария? Я успешно использовал заглушки в других тестах Cucumber, поэтому я знаю, что они работают в целом, но это первый раз, когда я написал шаг Cucumber, вся цель которого - предоставить заглушку.


person jefflunt    schedule 13.01.2012    source источник


Ответы (1)


Насколько я могу судить, ответ на вопрос, сохраняются они или нет, - просто «нет».

Я закончил писать комбинированный шаг, который делал следующее:

When /^I follow "([^\"]*)" while pretending that PSC is up and assignments exists for all users$/ do |link_text|
  PscV1.stub!(:default_connection_is_up?).and_return(true)
  PscV1.default_psc_connection("test user").stub!(:assignment_exists?).and_return(true)
  click_link link_text
end

... что работает. К сожалению, это не позволяет мне повторно использовать заглушки в качестве собственных шагов, но это работает.

ОБНОВЛЕНИЕ. Вы можете обойти это ограничение, назначив заглушку переменной уровня класса, доступ к которой можно получить на других этапах того же сценария.

person jefflunt    schedule 13.01.2012