Эликсир assert_raise не перехватывает исключения

Я написал этот тестовый пример:

assert_raise ArgumentError, myFn(a,b)

но он не оценивает так, как я ожидал. myFn вызывает ошибку ArgumentError (do: raise ArgumentError), но assert_raise ее не перехватывает.

Пример в документации работает нормально:

assert_raise ArithmeticError, fn ->
  1 + "test"
end

Из документации:

assert_raise(exception, function)
Утверждает, что exception возникает во время выполнения function. Возвращает спасенное исключение, в противном случае происходит сбой

Я предполагаю, что в моем тестовом примере аргументы оцениваются в первую очередь. Но как я должен был это написать?


person Filip Haglund    schedule 08.06.2016    source источник


Ответы (1)


Оборачивать вызов функции в функцию — это путь.

assert_raise ArgumentError, fn ->
  myFn(a, b)
end

Я ожидал, что assert_raise примет вызов функции, но он принимает функцию.

person Filip Haglund    schedule 08.06.2016
comment
Да, assert_rise — это не макрос, а обычная функция: github.com/elixir-lang/elixir/blob/ Это означает, что если вы просто передадите myFn(a, b), оно будет оценено, и значение будет передано assert_rise, что уже слишком поздно :) - person tkowal; 08.06.2016