如何使用Minitest简单地测试方法静态方法调用?

时间:2018-02-22 17:39:34

标签: ruby-on-rails mocha chai minitest

我正在测试的课程有一个方法:

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。

任何帮助将不胜感激!

1 个答案:

答案 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)