如何使用Rspec Mocks存根给定类的任何实例

And*_*ndy 19 ruby rspec mocking

以下代码引发错误: undefined method 'any_instance' for String:Class

require 'rspec'

RSpec.configure do |config|
  config.mock_with :rspec
end

describe String do
  it 'stubs' do
    String.any_instance.stub(:foo).and_return(1)
    ''.foo.should eq(1)
  end
end
Run Code Online (Sandbox Code Playgroud)

如何将Mocks模块包含在Class或Object类中?

Mel*_*ers 32

any_instance最近被添加到rspec,所以你的例子现在适用于我,因为它与rspec 2.7一样.

rspec 3更新:

这样做的新方法是 allow_any_instance_of(String).to receive(:foo).and_return(1)

以下是any_instance文档:https ://relishapp.com/rspec/rspec-mocks/docs/working-with-legacy-code/any-instance


Mik*_*wis 3

对于 2.6.0 之前的版本中的 RSpec Mocks,您无法做到这一点。但是,您可以any_instance与 Mocha(如此处所示或更高版本的 Rspec 一起使用。

在你的spec/spec_helper.rb

确保你有这一行:

config.mock_with :mocha

未注释。

  • 好吧,鉴于问题是“使用 Rspec Mocks”,我不确定答案“不使用 Rspec Mocks”是否有用。话又说回来,这比技术上正确的答案要好:你做不到。 (4认同)
  • 这是当前的 master,但尚未发布。它将在未来一两周内成为 rspec-mocks-2.6.0 版本的一部分。 (3认同)