【问题标题】:Can mocks and stubs persist between Cucumber steps?模拟和存根可以在 Cucumber 步骤之间持续存在吗?
【发布时间】:2012-01-13 18:12:52
【问题描述】:

我有一个依赖于名为 PSC 的第三方 API 的应用,但我想将我的黄瓜测试与对 PSC 的 API 调用隔离开来。

所以,我写了几个黄瓜步骤:

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 步骤,其全部目的是提供一个存根。

【问题讨论】:

    标签: cucumber rspec-rails stubbing


    【解决方案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
    

    ...这行得通。不幸的是,它不允许我将存根作为自己的步骤重用,但它确实有效。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多