访问RSpec支持文件中的方法时,"未定义的方法`stub_request'"

rjm*_*aro 6 ruby rspec ruby-on-rails

对于规范,我在Ruby-on-Rails项目中有以下文件结构:

/spec
  /msd
    /service
      service_spec.rb
  /support
    /my_module
      requests_stubs.rb
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

在我的service_spec.rb身上:

require 'rails_helper'
require 'support/my_module/requests_stubs'
...
Run Code Online (Sandbox Code Playgroud)

因为我只想要这个文件中可用的方法.

问题是,在运行测试时我调用该方法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
Run Code Online (Sandbox Code Playgroud)

访问WebMock方法时stub_request.

WebMock gem已安装,并且在spec_helper.rb文件中是必需的.

为什么会出现错误?看起来它无法访问WebMock gem,或者不知道如何访问它.关于如何解决它的任何想法?

Max*_*sky 14

stub_requestWebMock命名空间中定义,因此您必须使用WebMock.stub_request.要使其全局可用,您需要添加include WebMock::API到rails_helper

更好的是,包括webmock/rspec而不仅仅是webmock- 它将负责包括WebMock :: API以及设置webmock RSpec匹配器.