我正在测试的课程有一个方法:
def configuration_data(organization_id, plan_year_id)
Benefit::BenefitConfiguration.new(organization_id, plan_year_id).index
end
我已经对BenefitConfiguration索引方法进行了单独的测试,因此在这种情况下,我希望对configuration_data方法进行代码覆盖。在这种情况下,不确定测试方法以实现代码覆盖的最佳方法是什么。
我的测试尝试是:
instance = Benefit.new
index_mock = MiniTest::Mock.new
index_mock.expect :index, true
Benefit::BenefitConfiguration.any_instance.stubs(:new).returns(index_mock)
result = instance.configuration_data(1, 2)
assert_equal result, true
但是在运行时,它在实际的BenefitConfiguration索引方法中失败了,它似乎没有使用模拟索引返回值为true。
任何帮助将不胜感激!
答案 0 :(得分:0)
Benefit::BenefitConfiguration.any_instance.stubs(:new)
在给定类上调用any_instance
方法时会触发 new
...所以当您执行以下操作时,这将匹配:
Benefit::BenefitConfiguration.new
然而......你告诉它在你的类的实例上存根new
方法......所以你说你正在寻找代码来做这件事:
Benefit::BenefitConfiguration.new.new
这不是你真正想要的。
可能你想要这样的东西:
Benefit::BenefitConfiguration.stubs(:new).returns(index_mock)