2010-05-09 8 views
13

Je suis en train de se moquer d'une méthode de classe avec rspec:RSpec - se moquant d'une méthode de 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 

Dans mon spec, je suis en train de configurer l'attente Db :: Payload.list sera appelé quand je l'appelle 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 

Le problème est que je reçois toujours l'erreur suivante:

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

Toute aide la compréhension de cette erreur serait :-) les plus appréciés

+1

Avez-vous défini un fichier config.mock dans votre configuration Rspec? – shingara

Répondre

13

Votre spec_helper.rb devrait avoir quelque chose comme ceci:

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'argument par défaut est config.mock_with :rspec qui active le should_receive méthode. Si vous utilisez Mocha, par exemple, l'équivalent est expects, alors assurez-vous d'utiliser le bon cadre de simulation.

+0

C'était tout. THX! –

+0

Parfait. Merci beaucoup. –

Questions connexes