2016-10-23 2 views
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 보면

+0

은'Plug.Exception' 프로토콜을 기반으로 해결 오류 상태를 시도 할 것입니다. ecto 오류에 대한 구현이 있습니까? 기본 구현은'phoenix_ecto' 패키지에 포함되어 있습니다. – michalmuskala

+0

네, 의존성으로'{: phoenix_ecto, "~> 3.0"}'을 가지고 있고''Repo.get! (Memo, id)'' MemoController'. – ptd

+0

내 대답이 도움이 되었습니까? –

답변

0

, 나는

conn 
    |> put_status(404) 
    |> render("edit.html", memo: memo, changeset: changeset) 
관련 문제