如果使用rspec请求时间过长,如何测试行为?
我正在考虑使用线程来模拟这个:
describe "Test" do
it "should timeout if the request takes too long" do
lambda {
thread1 = Thread.new { #net::http request to google.com }
thread2 = Thread.new { sleep(xx seconds) }
thread1.join
thread2.join
}.should raise_error
end
end
Run Code Online (Sandbox Code Playgroud)
我想确保在第一次发出请求之后,另一个线程"开始",在这种情况下,它只是一个睡眠xx秒.然后我应该期望请求超时,因为执行时间太长
我认为有更好的方法来做到这一点.鉴于我请求的网址不相关.我只是想测试一下,如果执行时间太长,它确实会超时.
我可以使用stub(),expect()或任何rspec功能来模拟这个吗?
有什么方法可以将'块'传递给存根方法
http_request_to_google.stub(:connection).executethisblock(sleep for xx seconds)
.and_throw error ?
Run Code Online (Sandbox Code Playgroud)
任何帮助表示赞赏
DNN*_*NNX 10
如果请求未在20秒内完成,则以下测试失败.如果lambda中的代码没有引发Timeout :: Error,它也会失败.
因此,成功的情况是long_running_stuff在不到20秒的时间内引发异常.
require 'timeout'
describe "Test" do
it "should timeout if the request takes too long" do
Timeout::timeout(20) do # 20 seconds
lambda {
long_running_stuff(:timeout => 10.seconds)
}.should raise_error(Timeout::Error)
end
end
end
Run Code Online (Sandbox Code Playgroud)
我意识到这个问题很古老,但这是使用WebMock gem 的另一个解决方案:
stub_request(:any, 'www.google.com').to_timeout
Run Code Online (Sandbox Code Playgroud)
使用 Webmock 存根请求的另一个好处是,即使您更换了 HTTP 客户端,这也将继续工作,这将您的测试与代码分离。
| 归档时间: |
|
| 查看次数: |
9832 次 |
| 最近记录: |