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

时间:2016-06-10 11:23:04

标签: ruby testing

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

在我忘记这个存根步骤之前,我发生了这种情况,我的集成测试最终实际连接到第三方服务。

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

这可能吗?我需要覆盖哪些中央Ruby功能才能实现这一点,而其他副作用最小?

3 个答案:

答案 0 :(得分:1)

WebMock怎么样?你试过吗? https://github.com/bblimke/webmock

这一行应该有所帮助:

WebMock.disable_net_connect!(allow_localhost: true)

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

查看VCR

首先,看看its documentation,看看它是否符合您的要求,我想这就是它。我们已经在我的公司使用它几年来记录一个规范的HTTP测试并重放后续测试的结果。

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