Cucumber步骤之间可以存在嘲讽和存根吗?

时间:2012-01-13 18:12:52

标签: cucumber rspec-rails stubbing

我的应用程序依赖于名为PSC的第三方API,但我希望将我的黄瓜测试与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步骤,其目的是提供存根。

1 个答案:

答案 0 :(得分:0)

据我所知,他们是否坚持的答案很简单,就是“不”。

我写了一个合并的步骤,执行了以下操作:

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

......哪个有效。不幸的是,它不允许我重复使用存根作为他们自己的步骤,但它可以工作。

更新您可以通过将存根分配给类级别变量来解决此限制,该变量可以从同一场景中的其他步骤访问。