Pet*_*ter 13 ruby rspec mocking webmock
我有一些看起来像这样的代码:
while response.droplet.status != env["user_droplet_desired_state"] do
sleep 2
response = ocean.droplet.show env["droplet_id"]
say ".", nil, false
end
Run Code Online (Sandbox Code Playgroud)
您可以将应用程序设置为等到服务器处于某种状态(例如,重新启动它,然后再观察它直到它再次处于活动状态)
但是,我在测试中使用webmock,我无法找到第二次给出不同响应的方法.
例如,代码如下:
stub_request(:get, "https://api.digitalocean.com/v2/droplets/6918990?per_page=200").
with(:headers => {'Accept'=>'*/*', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'Authorization'=>'Bearer foo', 'Content-Type'=>'application/json', 'User-Agent'=>'Faraday v0.9.2'}).
to_return(:status => 200, :body => fixture('show_droplet_inactive'), :headers => {})
stub_request(:get, "https://api.digitalocean.com/v2/droplets/6918990?per_page=200").
with(:headers => {'Accept'=>'*/*', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'Authorization'=>'Bearer foo', 'Content-Type'=>'application/json', 'User-Agent'=>'Faraday v0.9.2'}).
to_return(:status => 200, :body => fixture('show_droplet'), :headers => {})
Run Code Online (Sandbox Code Playgroud)
这个想法是"第一次标记为无效,所以循环经历一次,然后标记为活动"
始终应用与请求匹配的最后声明的存根,即:
stub_request(:get,"www.example.com").to_return(:body =>"abc")
stub_request(:get,"www.example.com").to_return(:body =>"def")
Net :: HTTP.get('www.example.com','/')#====>"def"
是否可以在webmock中为具有不同结果的同一端点建模多个调用?
wom*_*ble 20
如果你将一个哈希数组传递给#to_return它,它将每次响应下一个响应(然后只是一遍又一遍地返回最后一个).例如:
require 'webmock/rspec'
require 'uri'
describe "something" do
it "happens" do
stub_request(:get, 'example.com/blah').
to_return({status: 200, body: 'ohai'}, {status: 200, body: 'there'})
puts Net::HTTP.get(URI('http://example.com/blah'))
puts Net::HTTP.get(URI('http://example.com/blah'))
puts Net::HTTP.get(URI('http://example.com/blah'))
puts Net::HTTP.get(URI('http://example.com/blah'))
end
end
Run Code Online (Sandbox Code Playgroud)
运行时rspec <file>,将打印:
ohai
there
there
there
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2168 次 |
| 最近记录: |