对于规范,我在Ruby-on-Rails项目中具有以下文件结构:
/spec
/msd
/service
service_spec.rb
/support
/my_module
requests_stubs.rb
我的
request_stubs.rb
有:module MyModule::RequestsStubs
module_function
def list_clients
url = "dummysite.com/clients"
stub_request(:get, url).to_return(status: 200, body: "clients body")
end
end
在我的
service_spec.rb
中,我有:require 'rails_helper'
require 'support/my_module/requests_stubs'
...
因为我只希望该方法在此文件中可用。
问题是,在运行测试时,我在
MyModule::RequestsStubs.list_clients
文件中调用了service_spec.rb
方法时,出现以下错误:Failure/Error:
stub_request(:get, url).to_return(status: 200, body: "clients body")
NoMethodError:
undefined method `stub_request' for MyModule::RequestsStubs:Module
访问WebMock方法
stub_request
时。WebMock gem已安装,并且在
spec_helper.rb
文件中是必需的。为什么会发生错误?看起来它无法访问WebMock gem,或者不知道如何访问它。关于如何解决的任何想法?
最佳答案
stub_request
是在WebMock
命名空间中定义的,因此您必须使用WebMock.stub_request
。要使其在全局范围内可用,您需要将include WebMock::API
添加到rails_helper中。
更好的是,包括webmock/rspec
而不是仅webmock
-它会照顾到包括WebMock::API
以及设置webmock RSpec匹配器。