在 Ruby w/rspec 上的 Cucumber 中,如何 expect/assert 在 Then 子句中进行网络模拟调用?
In Cucumber on Ruby w/rspec, how do I expect/assert a webmocked call in a Then clause?
我正在编写一个 gem 作为远程 API 的客户端,所以我正在使用 webmock 来模拟远程 API,使用 Cucumber 进行测试rspec-模拟礼物。
作为我的 Cucumber 测试的一部分,我打算在 Given
子句中存入我的 API 但随后我想指定远程 API 在 Then
子句。
一个真正基本的例子是:
专题文件
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
问题:
如何验证我的 google 存根已被调用?
旁注:我知道我可以使用 expect(a_request(...))
或 expect(WebMock).to ...
语法,但我的感觉是我将重复 Given
子句中定义的内容。
我自己回答这个问题,尽管最好有人验证这是正确的and/or没有重大缺陷:
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
子句中对它的期望。
在对两个独立场景的有限测试中,这种方法似乎有效。
我正在编写一个 gem 作为远程 API 的客户端,所以我正在使用 webmock 来模拟远程 API,使用 Cucumber 进行测试rspec-模拟礼物。
作为我的 Cucumber 测试的一部分,我打算在 Given
子句中存入我的 API 但随后我想指定远程 API 在 Then
子句。
一个真正基本的例子是:
专题文件
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
问题: 如何验证我的 google 存根已被调用?
旁注:我知道我可以使用 expect(a_request(...))
或 expect(WebMock).to ...
语法,但我的感觉是我将重复 Given
子句中定义的内容。
我自己回答这个问题,尽管最好有人验证这是正确的and/or没有重大缺陷:
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
子句中对它的期望。
在对两个独立场景的有限测试中,这种方法似乎有效。