web-dev-qa-db-ja.com

RspecMocksを使用して特定のクラスのインスタンスをスタブ化する方法

次のコードはエラーを発生させます: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

MocksモジュールをClassまたはObjectクラスに含めるにはどうすればよいですか?

20
Andy

any_instanceが最近rspecに追加されたので、あなたの例はrspec2.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

32

2.6.0より前のバージョンのRSpecMocksでは、それを行うことはできません。ただし、any_instanceはMocha( ここ )またはそれ以降のバージョンのRspecで使用できます。

あなたのspec/spec_helper.rb

次の行があることを確認してください。

config.mock_with :mocha

コメントなし。

3
Mike Lewis