1

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

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 的未定义方法“*”。我现在完全迷路了,所以我很感激任何帮助和想法。

4

1 回答 1

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
于 2012-11-09T23:05:17.690 回答