gpt4 book ai didi

elixir - 在 Phoenix 应用程序中为异常设置自定义响应

转载 作者:行者123 更新时间:2023-12-04 00:38:03 28 4
gpt4 key购买 nike

我正在用 ecto 编写 phoenix 应用程序,并在测试中包含以下代码片段

{:ok, data} = Poison.encode(%{email: "nonexisting@user.com", password: "mypass"})

conn()
|> put_req_header("content-type", "application/json")
|> put_req_header("accept", "application/json")
|> post(session_path(@endpoint, :create), data)
> json_response(:not_found) == %{}

这会抛出一个 Ecto.NoResultsError

我有这个定义
defimpl Plug.Exception, for: Ecto.NoResultsError do
def status(_exception), do: 404
end

但测试仍然抛出 Ecto.NoResultsError,任何指针?

最佳答案

让我们考虑一下它是如何在每个环境中工作的。

  • :prod ,默认是渲染错误页面,所以你应该看到一个由 YourApp.ErrorView 渲染的页面带有状态码;
  • :dev ,默认是显示调试页面,因为大多数情况下您在构建代码时都会出错。如果要查看实际渲染的错误页面,需要设置debug_errors: false在您的 config/dev.exs ;
  • :test ,它像生产一样工作,但是,因为您是从测试中调用您的应用程序,如果您的应用程序崩溃,您的测试也会崩溃。我们正在 future 版本中改进这一点,您应该能够编写如下内容:
    assert_raise Ecto.NoResultsError, fn ->
    get conn, "/foo"
    end
    {status, headers, body} = sent_response(conn)
    assert status == 404
    assert body =~ "oops"
  • 关于elixir - 在 Phoenix 应用程序中为异常设置自定义响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30536979/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com