2010-05-09 100 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