2010-05-09 13 views
13

Sto cercando di prendere in giro un metodo di classe con RSpec:RSpec - beffardo un metodo di classe

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 

Nella mia spec, sto cercando di impostare l'aspettativa Db :: Payload.list verrà chiamato quando chiamo 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 

Il problema è che io sono sempre ricevendo il seguente errore:

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

Qualsiasi aiuto comprensione questo errore sarebbe stato più apprezzato :-)

+1

Hai definito un config.mock nella configurazione di Rspec? – shingara

risposta

13

tuo spec_helper.rb dovrebbe avere qualcosa di simile:

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 

L'argomento predefinito è config.mock_with :rspec che abilita lo should_receive metodo. Ad esempio, se stai usando Mocha, l'equivalente è expects, quindi assicurati di utilizzare il giusto framework di simulazione.

+0

Era così. GRAZIE! –

+0

Perfetto. Grazie mille. –

Problemi correlati