如何测试(rspec)耗时太长的 http 请求?

2024-06-21

如果 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

我想确保在首次发出请求后,另一个线程“启动”,在本例中只是休眠 xx 秒。那么我应该期望请求超时,因为执行时间太长

我认为有更好的方法可以做到这一点。鉴于我请求的网址不相关。我只是想测试一下,如果执行时间太长,确实会超时。

我可以使用stub()、expect() 或任何rspec 功能来模拟这个吗?

有什么方法可以将“块”传递到存根方法中

http_request_to_google.stub(:connection).executethisblock(sleep for xx seconds)
.and_throw error ?

任何帮助表示赞赏


如果请求未在 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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何测试(rspec)耗时太长的 http 请求? 的相关文章

随机推荐