1
(404)를 설정하지 않는 I 다음 컨트롤러 액션이 : 컨트롤러에서 current_user/1
기능에서 현재 사용자를 발견피닉스 Ecto.NoResultsError 자동으로 상태
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
: 다음의 시험으로
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
을 세션과 테스트 도우미 기능은 테스트 요청에 대해 현재 사용자를 설정합니다.
이 테스트를 실행하면 Ecto.NoResultsError
을 얻을 수 있지만 상태 코드는 404
대신 200
입니다. 나는 Phoenix가 자동으로 404
상태를 설정해야한다고 생각합니다. 그러나 그것은 일어나지 않습니다. assert_error_sent 200
으로 기대치를 변경하면 테스트가 통과하지만 원하는 동작이 아닙니다.
상태가 404
인지 어떻게 확인할 수 있습니까? 당신이 http://www.phoenixframework.org/docs/controllers#section-setting-the-http-status 보면
은'Plug.Exception' 프로토콜을 기반으로 해결 오류 상태를 시도 할 것입니다. ecto 오류에 대한 구현이 있습니까? 기본 구현은'phoenix_ecto' 패키지에 포함되어 있습니다. – michalmuskala
네, 의존성으로'{: phoenix_ecto, "~> 3.0"}'을 가지고 있고''Repo.get! (Memo, id)'' MemoController'. – ptd
내 대답이 도움이 되었습니까? –