我有一些像这样的伪代码:
catch :my_error do
first_method
second_method
third_method
end
def first_method
if error_condition?
throw :my_error
end
end
我正在尝试使用Minitest来测试第一种方法是否正确抛出:my_error。我的测试看起来像这样:
assert_throws :my_error do
some code in here that ensures error_condition? is true
end
当我运行此测试时,Minitest未通过测试:
Minitest :: Assertion:期望:my_error被抛出
如果我注释掉了catch:my_error调用,测试通过,但当然我需要在生产中使用该代码。不确定“assert_throws”的含义是什么,如果它不能用于捕获它的代码。
答案 0 :(得分:0)
assert_throws
会断言某些东西已被抛出,所以如果它被你的代码捕获,你就不能断言某些东西已被抛出!
你可以断言一个特定的方法抛出,然后另一个调用这个方法不会
或者,如果您更改了catch中的任何数据,则可以测试此数据