【问题标题】:How can I make Sinatra simulate a refused connection?如何让 Sinatra 模拟被拒绝的连接?
【发布时间】:2016-01-14 16:47:51
【问题描述】:

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

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

  • 引发异常
  • 在方法返回之前立即关闭流,如here 所示:
发布“/external_app”做 流(:keep_open) 做 |out| out.close 结尾 结尾

谢谢!

【问题讨论】:

  • 使用这两种技术后你的发现是什么?你还面临什么问题?
  • 引发异常只会返回带有堆栈跟踪的 500,而且我什至无法进入流主体以按照文档链接中的说明过早关闭它。据我所知,the stream example doesn't work with rack. 我可能应该在发布此内容时提到,现在编辑问题。 (500 不符合我的需求,因为它仍在返回响应。)

标签: ruby sinatra rack


【解决方案1】:

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

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

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

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

【讨论】:

  • 超时想法适用于我的用例。不理想,因为我们的自动化测试用例现在需要更长的时间,但它绝对是一个解决方案。
猜你喜欢
  • 1970-01-01
  • 2017-08-08
  • 1970-01-01
  • 1970-01-01
  • 2023-03-21
  • 1970-01-01
  • 2018-09-15
  • 2018-08-20
  • 1970-01-01
相关资源
最近更新 更多