在使用Ruby的w / rspec的Cucumber中,我如何在Then子句中期望/断言webmocked调用?

时间:2015-07-23 13:04:39

标签: ruby rspec cucumber webmock

我正在编写一个充当远程API客户端的gem,因此我使用webmock来模拟远程API,使用cucumber进行测试,同时使用rspec-mock进行测试。

作为我的Cucumber测试的一部分,我打算在Given子句中存储我的API,但后来我想指定在Then子句中调用远程API。

一个非常基本的例子是:

功能文件

Scenario: Doing something that triggers a call
  Given I have mocked Google
  When I call my library
  Then it calls my Google stub
  And I get a response back from my library

步骤定义

Given /I have mocked my API/ do
  stub_request(:get, 'www.google.com')
end

When /I call my library/ do
  MyLibrary.call_google_for_some_reason
end

Then /it calls my Google stub/ do
  # Somehow test it here
end

问题: 如何验证我的谷歌存根已被调用?

旁注:我知道我可以使用expect(a_request(...))expect(WebMock).to ...语法,但我的感觉是我会重复Given条款中定义的内容。

1 个答案:

答案 0 :(得分:1)

我自己回答这个问题,尽管有人确认这是正确的和/或没有重大缺陷是好的:

Given /I have mocked my API/ do
  @request = stub_request(:get, 'www.google.com')
end

Then /it calls my Google stub/ do
  expect(@request).to have_been_made.once
end

要注意的位是@request的赋值和Then子句中对它的期望。

在两个独立场景的有限测试中,这种方法似乎有效。