问题描述
我们有一个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,否则我认为这是不可能的,这似乎是一个坏主意,而不仅仅是重构测试。