我想为以下方法编写测试:
class SomeObject
def test_method
do_something = true
OtherObject.callback_method(do_something) do
# test method logic
end
end
end
使用callback_method:
class OtherObject
def self.callback_method(true_or_false)
#do some global checks
yield
end
end
使用Minitest是否有可能以某种方式存根回调?
我希望做类似的事情:
some_object = SomeObject.new()
some_object.stub(:callback_method, true) do
#assert method logic
end
任何帮助将不胜感激!
答案 0 :(得分:1)
您可以暂时以与您希望的方式完全相同的方式存储方法。 (Docs for MiniTest::Object#stub
)
由于您实际想要存根的方法是OtherObject.callback_method
,因此您可以将其存根为
OtherObject.stub(:callback_method,return_value) {}
现在,当在块(OtherObject.callback_method
)内调用{}
时,它将返回return_value
而不是实际调用该方法。因此,鉴于上面的示例,以下测试将通过:
def test_returns_true_when_I_make_it
test_obj = SomeObject.new
OtherObject.stub(:callback_method,true) do
assert test_obj.test_method, true
end
end
这是因为你的SomeObject#test_method
返回了OtherObject.callback_method
的值,所以因为我记得那个调用我真的只是测试存根工作你可以用任何相等的true
值替换你想要的对象,测试仍然会通过,例如
def test_returns_foobar_when_I_make_it
test_obj = SomeObject.new
OtherObject.stub(:callback_method,"foobar") do
assert test_obj.test_method, "foobar"
end
end