我有以下控制器操作:
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
测试助手函数为测试请求设置当前用户。
当我运行此测试时,我成功获得了Ecto.NoResultsError
,但状态代码为200
而不是404
。我希望Phoenix应该自动设置404
状态,但似乎没有发生。如果我将期望值更改为assert_error_sent 200
,则测试通过,但这不是我想要的行为。
如何确保状态为404
?
答案 0 :(得分:1)
如果你看http://www.phoenixframework.org/docs/controllers#section-setting-the-http-status,我会尝试
conn
|> put_status(404)
|> render("edit.html", memo: memo, changeset: changeset)