Elixir 如何在渲染中引发异常
我的控制器中有以下异常处理程序Elixir 如何在渲染中引发异常,elixir,phoenix-framework,Elixir,Phoenix Framework,我的控制器中有以下异常处理程序 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 |>
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
我希望它能提升404
,而不是exto.CastError
来提升400
。但是,我不能满足以下测试条件
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
因为我的自定义异常处理程序没有引发异常
问题是,如何在我自己的自定义异常处理程序中引发适当的异常以满足测试要求?请查看本页,了解如何在Phoenix中处理错误:
您可能可以覆盖默认值(已定义),从而使exto.CastError产生404。我使用了错误的方法,而不是
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
我应该在控制器中使用此块
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
谢谢你,帮我找到了我做错的地方。虽然要回答我的问题,这条线索还不够:)