我的控制器中有以下异常处理程序
def call(conn, opts) do
try do
super(conn, opts)
rescue
e in Ecto.CastError -> conn
|> put_status(:not_found)
|> render(ErrorView, "404.html")
e in ArgumentError -> conn
|> put_status(:not_found)
|> render(ErrorView, "404.html")
end
end
而不是Ecto.CastError
提出400
我希望它引发404
。但是,我无法满足以下测试条件
test "renders page not found when id is not all number", %{conn: conn} do
assert_error_sent 404, fn ->
get conn, url_path(conn, :show, "sdf2sd")
end
end
由于我的自定义异常处理程序没有引发异常。
问题是,如何在我自己的自定义异常处理程序中引发适当的异常以满足测试?
答案 0 :(得分:1)
请查看此页面,了解如何处理Phoenix中的错误:http://www.phoenixframework.org/v1.1.4/docs/custom-errors
您可以覆盖默认值(已定义here),以便Ecto.CastError产生404.
答案 1 :(得分:1)
我使用错误的方法,而不是
def call(conn, opts) do
try do
super(conn, opts)
rescue
e in Ecto.CastError -> conn
|> put_status(:not_found)
|> render(ErrorView, "404.html")
e in ArgumentError -> conn
|> put_status(:not_found)
|> render(ErrorView, "404.html")
end
end
我应该在我的控制器中使用这个块
defimpl Plug.Exception, for: Ecto.CastError do
def status(_exception), do: 404
end