是否可以阻止 Ruby 实例打开网络连接



我维护一个用Ruby编写的Web API。它连接到许多第三方 Web 服务。在编写测试时,我会存根任何需要连接到网络的函数并返回瓶装数据。

以前发生在我

身上,我忘记了这个存根步骤,我的集成测试最终实际上连接到了第三方服务。

考虑到这一点,我想阻止Ruby能够打开网络连接。尝试时,我希望它引发异常,指出我忘记存根的功能。

这可能吗?我需要覆盖哪个中央 Ruby 函数才能以最小的其他副作用来实现这一点?

WebMock呢?你试过吗?https://github.com/bblimke/webmock

这一行应该有帮助:

WebMock.disable_net_connect!(allow_localhost: true)

正如您刚才所说,手动存根是不可靠的。

更好的解决方案可能是将调用外部服务的代码包装在外观后面,并使用依赖项注入在创建时将 Web 处理服务传递到外观中。 然后,您的测试套件只需要对存根服务执行相同的操作。 您只需要执行此操作一次,然后测试外部代码的任何测试都将使用存根服务。

查看 VCR。

首先,看看它的文档,看看它是否是你需要的,我想是。几年来,我们一直在我的公司使用它来记录规范的一个HTTP测试,并为后续测试重播结果。

我们发现它在处理外部 API 时非常宝贵。

最新更新