Elixir assert_raise doesn't catch exceptions
Asked Answered
A

1

21

I wrote this test case:

assert_raise ArgumentError, myFn(a,b)

but it does not evaluate in the way I'd expect. myFn raises an ArgumentError (do: raise ArgumentError), but it is not caught by assert_raise.

The example in the docs works just fine:

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

From the documentation:

assert_raise(exception, function)
Asserts the exception is raised during function execution. Returns the rescued exception, fails otherwise

I'm guessing that in my test case, the arguments are evaluated first. But how should I've written it?

Atreus answered 8/6, 2016 at 13:16 Comment(0)
A
28

Wrapping the function call in a function is the way to go.

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

I expected assert_raise to take a function call, but it takes a function.

Atreus answered 8/6, 2016 at 13:25 Comment(1)
Yes, assert_rise is not a macro, but normal function: github.com/elixir-lang/elixir/blob/… This means that if you just pass myFn(a, b) it will be evaluated and the value will be passed to assert_rise which is already too late :)Beatify

© 2022 - 2024 — McMap. All rights reserved.