如何使用minitest测试Ruby catch / throw?

时间:2018-03-09 16:42:20

标签: ruby minitest

我有一些像这样的伪代码:

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”的含义是什么,如果它不能用于捕获它的代码。

1 个答案:

答案 0 :(得分:0)

assert_throws会断言某些东西已被抛出,所以如果它被你的代码捕获,你就不能断言某些东西已被抛出!

你可以断言一个特定的方法抛出,然后另一个调用这个方法不会

或者,如果您更改了catch中的任何数据,则可以测试此数据