Elixir Phoenix Exto.NoResultsError未自动设置404状态
我有以下控制器操作:Elixir Phoenix Exto.NoResultsError未自动设置404状态,elixir,phoenix-framework,Elixir,Phoenix Framework,我有以下控制器操作: def edit(conn, %{"id" => id}) do memo = Repo.get_by!(Memo, id: id, user_id: current_user(conn).id) changeset = Memo.changeset(memo) render(conn, "edit.html", memo: memo, changeset: changeset) end 通过以下测试: test "404s for editing wh
def edit(conn, %{"id" => id}) do
memo = Repo.get_by!(Memo, id: id, user_id: current_user(conn).id)
changeset = Memo.changeset(memo)
render(conn, "edit.html", memo: memo, changeset: changeset)
end
通过以下测试:
test "404s for editing when chosen resource does not belong to current user", %{conn: conn} do
user = Repo.insert! %User{}
memo = Repo.insert! %Memo{user: user}
other_user = Repo.insert! %User{}
assert_error_sent 404, fn ->
conn
|> with_current_user(other_user)
|> get(memo_path(conn, :edit, memo))
end
end
其中,控制器中的current_user/1
功能从会话中查找当前用户,而with_current_user/2
测试助手功能为测试请求设置当前用户
当我运行这个测试时,我成功地获得了一个exto.NoResultsError
,正如我所期望的,但是状态代码是200
,而不是404
。我希望Phoenix应该自动设置404
状态,但这似乎没有发生。如果我将预期更改为assert\u error\u sent 200
,则测试通过,但这不是我想要的行为
如何确保状态为404
?如果您查看,我会尝试
conn
|> put_status(404)
|> render("edit.html", memo: memo, changeset: changeset)
错误状态解析基于
Plug.Exception
协议。您是否有针对EXTO错误的实施方案?默认的实现包含在phoenix\u-exto
包中。是的,我有{:phoenix\u-exto,~>3.0”}
作为依赖项,并且我有一个类似的测试通过,我做了Repo.get!(备忘录,id)
在显示备忘录控制器的操作中。我的回答有帮助吗?@SimonH,没有,因为出现错误。我可以拯救它并设置一个404,但我希望exto.NoResultsError
协议的Plug.Exception
实现能够自动完成(因为这就是它被记录的功能)。