如何让 Sinatra 模拟拒绝连接?

How can I make Sinatra simulate a refused connection?

我在运行集成测试时一直在使用Sinatra with Rack来模拟外部服务,想写一个服务器宕机的测试。是否可以让 Sinatra 在不完全关闭服务器进程的情况下模拟 'Connection Refused' 错误?

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

    post '/external_app' do
        stream(:keep_open) do |out|
            out.close
        end
    end

谢谢!

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

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

然后在您的 sinatra 操作块中使用类似 sleep 的方法,其 x 秒大于您设置的最大超时时间。

但实际上你可能不需要让事情变得复杂,你可以只抛出你的 http 客户端因连接超时而抛出的异常(以及任何其他连接异常),然后测试你的应用程序是否能够捕获并相应地处理异常。