ruby-on-rails - "undefined method ` stub_request '"访问 RSpec 支持文件中的方法时

标签 ruby-on-rails ruby rspec

我的 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/

相关文章:

ruby - Autotest、Shoulda、Ruby - 设置?

ruby - what is - gets is a directory - 错误信息

ruby - 我可以拥有没有方法类的 RSpec 吗

ruby-on-rails - 使用 zeus : Postgres is being accessed by other users 进行 cucumber 和 RSpec 测试

ruby-on-rails - 让 Devise AJAX 登录使用可确认

ruby - 为 REST CRUD 设置 rom-http 关系

RUBYLIB 环境路径

ruby-on-rails - 没有路由匹配 [GET] "/signout"

ruby-on-rails - 如何在 Rails Controller 中使用闭包?

ruby - Ruby 项目的标准文件结构是什么?