如何让Sinatra模拟被拒绝的连接?

时间:2016-01-14 16:47:51

标签: ruby sinatra rack

我一直在使用Sinatra with Rack在运行集成测试时模拟外部服务,并希望在服务器关闭时为该案例编写测试。是否有可能让Sinatra在不完全关闭服务器进程的情况下模拟“连接被拒绝”错误?

到目前为止,我已经尝试过:

  • 提出例外
  • 在方法返回之前立即关闭流,如图here所示:
    post '/external_app' do
        stream(:keep_open) do |out|
            out.close
        end
    end

谢谢!

1 个答案:

答案 0 :(得分:0)

您正在尝试关闭服务器,您所做的方法仍然依赖于sinatra服务器的响应。

你可以在你的http客户端设置一个非常短的连接超时(任何http客户端应该能够做到这一点)

然后在你的sinatra动作块中使用sleep方法,x秒大于你设置的最大超时时间。

但实际上你可能不需要做一些复杂的事情,你可以抛出一个异常,你的http客户端抛出连接超时(和任何其他连接异常),并测试你的应用程序是否能够捕获和处理相应的例外。