我正在编写一个充当远程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
条款中定义的内容。
答案 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
子句中对它的期望。
在两个独立场景的有限测试中,这种方法似乎有效。