我维护一个用Ruby编写的Web API。它连接到许多第三方Web服务。在编写测试时,我会将任何需要连接到网络的函数存根并返回瓶装数据。
在我忘记这个存根步骤之前,我发生了这种情况,我的集成测试最终实际连接到第三方服务。
考虑到这一点,我想阻止Ruby打开网络连接。尝试时,我希望它引发异常,指出我忘记了什么功能。
这可能吗?我需要覆盖哪些中央Ruby功能才能实现这一点,而其他副作用最小?
答案 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时它非常宝贵。