所以,例如,我有:
@doc ~S"""
Fails on more than 6 elements:
iex> values = [1,2,3,4,5,6,7]
...> Units.ProjectedValues.new(values)
** (FunctionClauseError) no function clause matching in Units.ProjectedValues.new/1
"""
但是,我只想测试FunctionClauseError
是否被引发,而不是消息内容本身。
答案 0 :(得分:4)
现在没有任何直接的方法。如果您不提供任何消息,parser会创建一个空字符串作为消息,并且似乎没有任何检查将空消息(或任何其他消息,如"..."
)视为匹配所有。
如果你需要在doctest中多次这样做,并且真的不想写完整的消息,你可以使用如下的帮助宏:
defmodule M do
@doc ~S"""
iex> M.sum([1, 2, 3])
6
iex> M.rescue_struct M.sum({1, 2, 3})
FunctionClauseError
"""
def sum([]), do: 0
def sum([x | xs]), do: x + sum(xs)
defmacro rescue_struct(expr) do
quote do
try do
unquote(expr)
raise "expected an error to be raised"
rescue
e -> e.__struct__
end
end
end
end