所以我的情况是: 我有两个模块具有相同的结构:
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。我现在完全迷失了,所以我会感激任何帮助和想法。
答案 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