摩卡期待方法

时间:2012-11-09 22:57:27

标签: ruby-on-rails rspec mocha

所以我的情况是: 我有两个模块具有相同的结构:

module Module1
  class Config

    def fee_rate
      2
    end
  end
end

所以,比如说,Module2会使用方法fee_rate来配置类Config,只是使用不同的值(这些实际上是在rails引擎中实现的,但它应该没关系)

然后我的模型可以使用Module1或Module2来获取费率值:

def config
  @config ||= "#{module_name.titleize}::Config".constantize.new
  @config
end

def get_value
  config.get_fee * some_other_value
end

我正在尝试测试的是,是否在正确的类上调用了get_fee函数:

"#{model.module_name.titleize}::Config".constantize.any_instance.expects(:get_fee).at_least_once
model.get_value

并且当我调用get_value时,我得到以下错误 - nil的未定义方法`*':NilClass。我现在完全迷失了,所以我会感激任何帮助和想法。

1 个答案:

答案 0 :(得分:2)

通过设置get_fee的期望,您正在阻止实际的方法调用发生。因为您没有为期望设置返回值,例如expects(:get_fee).at_least_once.returns(3)它返回nil,因此出现错误消息。

您可以通过完全取消期望并检查是否创建了正确类型的配置类来获得更多成功,例如

model.get_value
assert_equal "#{model.module_name.titleize}::Config".constantize, 
             model.config.class