Ruby 如何使用Rspec mock存根给定类的任何实例
以下代码引发错误:Ruby 如何使用Rspec mock存根给定类的任何实例,ruby,mocking,rspec,Ruby,Mocking,Rspec,以下代码引发错误:未定义String:Class的“any_instance”方法 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 如何将Mocks模块包括到
未定义String:Class的“any_instance”方法
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
如何将Mocks模块包括到类或对象类中?对于2.6.0之前版本的RSpec mock,您不能这样做。但是,您可以在Mocha(如图所示)或Rspec的更高版本中使用任何_实例
在您的spec/spec\u helper.rb
确保您有这一行:
config.mock_随附:摩卡
未注释 任何_实例最近都添加到了rspec中,因此您的示例现在对我来说就像rspec2.7一样有效
rspec 3的更新:
新的方法是
允许(String.)的任何实例接收(:foo.)并返回(1)
这里有更多的实例文档:好吧,考虑到问题是“使用Rspec mock”,我不确定“不要使用Rspec mock”的答案是否有用。再说一遍,这比技术上正确的答案要好:你做不到。上面的测试实际上是来自Rspec本身的测试。模块AnyInstance是通过(mocks.rb)被包含的:Class.Class_eval{include RSpec::mocks::AnyInstance}
我认为有一种方法可以做到这一点。这就是当前的主程序,但尚未发布。在未来一两周内,它将成为rspec-mocks-2.6.0发行版的一部分。我在2.7.1中,但有一个与rspec-mocks 3.0文档类似的问题: