2011-04-12 10 views
18

El siguiente código genera un error: undefined method 'any_instance' for String:ClassCómo stub cualquier instancia de una clase determinada usando Rspec Mocks

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 

¿Cómo puedo incluir el módulo de burla en la clase o clase de objetos?

Respuesta

3

Con RSpec Mock en versiones anteriores a 2.6.0, no puede hacerlo. Sin embargo, puede usar any_instance con Mocha (como se ve en here) o en versiones posteriores de Rspec.

En su spec/spec_helper.rb

Asegúrate de que tienes esta línea:

config.mock_with :mocha

sin comentar.

+4

Pues bien, dado que la cuestión está "usando Rspec burla", no estoy seguro de la respuesta "no utilice Rspec Mocks" es útil. Por otra parte, es mejor que la respuesta técnicamente correcta: no puedes hacerlo. –

+0

muy cierto, respuesta actualizada. –

+1

La prueba anterior es en realidad una prueba de Rspec [enlace] (https://github.com/rspec/rspec-mocks/blob/master/spec/rspec/mocks/any_instance_spec.rb#L124). Y el módulo AnyInstance se incluye a través de (mocks.rb): 'Class.class_eval {include RSpec :: Mocks :: AnyInstance}' Creo que hay una manera de hacerlo de alguna manera. – Andy

30

any_instance se ha agregado recientemente a rspec, por lo que su ejemplo ahora funciona para mí como lo es con rspec 2.7.

Aquí es más documentación any_instance: https://www.relishapp.com/rspec/rspec-mocks/docs/method-stubs/stub-on-any-instance-of-a-class

+0

Documento oficial: http://rubydoc.info/gems/rspec-mocks/RSpec/Mocks/AnyInstance –

+0

Rspec Mocks 3.0 doc: [https: //www.relishapp .com/rspec/rspec-mocks/docs/working-with-legacy-code/any-instance] (https://www.relishapp.com/rspec/rspec-mocks/docs/working-with-legacy-code/ cualquier caso) – user650654

Cuestiones relacionadas