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 "}'を持っています。私は 'show'アクションで' Repo.get!(Memo、id) MemoController'。 – ptd
私の回答は役に立ちましたか? –