2010-05-09 17 views
13

Estoy tratando de burlarse de un método de clase con rspec:RSpec - burlarse de un método de clase

lib/db.rb

 
class Db 
    def self.list(options) 
    Db::Payload.list(options) 
    end 
end 

lib/db/payload.rb

 
class Db::Payload 
    def self.list(options={}) 
    end 
end 

En mi especificación, estoy tratando de instalar la expectativa Db :: Payload.list se llamará cuando llamo Db.list:

 
require 'db/payload' 

describe Db do 
    before(:each) do 
    @options = {} 
    Db::Payload.should_receive(:list).with(@options) 
    end 

    it 'should build the LIST payload' do 
    Db.list(@options) 
    end 
end 

El problema es que siempre estoy recibiendo el error siguiente:

 
undefined method `should_receive' for Db::Payload:Class 

ayuda para comprender este error sería :-) más apreciado

+1

¿Ha definido un config.mock en su configuración Rspec? – shingara

Respuesta

13

Su spec_helper.rb debe tener algo como esto:

Spec::Runner.configure do |config| 
    # == Mock Framework 
    # 
    # RSpec uses its own mocking framework by default. If you prefer to 
    # use mocha, flexmock or RR, uncomment the appropriate line: 
    # 
    # config.mock_with :mocha 
    # config.mock_with :flexmock 
    # config.mock_with :rr 
end 

El argumento predeterminado es config.mock_with :rspec que habilita el should_receive método. Si usa Mocha, por ejemplo, el equivalente es expects, así que asegúrese de estar utilizando el marco de burla correcto.

+0

Eso fue todo. ¡GRACIAS! –

+0

Perfecto. Muchas gracias. –

Cuestiones relacionadas