如果尚未调用Webmock stub_request,则在测试结束时对其进行强制

问题描述

我们有一个RoR应用程序,即Rspec,用于使用Webmock进行HTTP请求测试。 在不得不对遗留代码库进行一些重构之后,我意识到我们的许多测试都有不必要的存根。 像这个例子一样,do_a函数已经过重构,因此我们不再进行任何api调用,因此不再需要stub_request,更糟的是,应将其删除。

    it 'does something' do
       stub_request(:get,'http://something.com/users/123')

       do_a

       expect(..) 
    end

解决此问题的一种方法是:

    it 'does something' do
       stub_something = stub_request(:get,'http://something.com/users/123')

       do_a

       expect(..) 
       expect(stub_something).to have_been_requested.once
    end

但是我想通过严格模式直接强制执行此操作,如果未调用任何已声明的存根,则测试将失败?然后,第一个示例将自动失败。

非常感谢您的帮助

解决方法

您要使用expectations而不是stub_request

expect(WebMock).to have_requested(:get,"http://something.com/users/123").once

# or 

expect(a_request(:get,"http://something.com/users/123")).to have_been_made.once

但是我想通过严格模式直接执行此操作,如果未调用任何已声明的存根,则测试将失败?

除非您进行大量的monkeypatching,否则我认为这是不可能的,这似乎是一个坏主意,而不仅仅是重构测试。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...