2010-05-09 97 views
13

我試圖嘲弄一類方法使用RSpec:RSpec的 - 嘲諷類方法

的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 

在我的規範中,我試圖設置期望Db :: Payload.list將在我打電話給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 

的問題是,我總是收到以下錯誤:

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

任何幫助理解這個錯誤將是最欣賞:-)

+1

你在你的Rspec configure中定義了一個config.mock嗎? – shingara 2010-05-09 16:35:19

回答

13

spec_helper.rb應該有這樣的事情:

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 

默認參數是config.mock_with :rspec它使should_receive方法。例如,如果您使用Mocha,則相當於expects,因此請確保您使用的是正確的模擬框架。

+0

就是這樣。謝謝! – 2010-05-21 21:44:02

+0

完美。非常感謝。 – 2012-12-13 18:22:30