对于规范,我在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匹配器。

10-07 21:16