我的 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'
...
因为我只想要这个文件中可用的方法。
问题是,在运行测试时,我调用 service_spec.rb
文件中的方法 MyModule::RequestsStubs.list_clients
,出现以下错误:
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 匹配器。
关于ruby-on-rails - "undefined method ` stub_request '"访问 RSpec 支持文件中的方法时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49074435/