2016-10-23 7 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 "}'を持っています。私は 'show'アクションで' Repo.get!(Memo、id) MemoController'。 – ptd

+0

私の回答は役に立ちましたか? –

答えて

0

、私は

conn 
    |> put_status(404) 
    |> render("edit.html", memo: memo, changeset: changeset) 
関連する問題