Как заглушить любые экземпляры для данного класса, используя Rspec Mocks - PullRequest
18 голосов
/ 12 апреля 2011

Следующий код вызывает ошибку: 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?

Ответы [ 2 ]

31 голосов
/ 24 ноября 2011

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

3 голосов
/ 13 апреля 2011

С RSpec Mocks в версиях, предшествующих 2.6.0, вы не можете этого сделать. Однако вы можете использовать any_instance с Mocha (как видно здесь ) или в более поздних версиях Rspec.

В вашем spec/spec_helper.rb

Убедитесь, что у вас есть эта строка:

config.mock_with :mocha

раскомментирована.

...