基本的なアプリケーションがあり、コントローラーでプラグを使用しようとしました。リクエストボディに「url」パラメータがない場合は、基本的に 400 を返す必要があります。Postman からリクエストを送信すると正常に動作しますが、テストでは動作しないようです。
テスト環境でも動作させるために何かする必要がありますか?
plug :check_url_existence when action in [:create]
def create(conn, link_params) do
with {:ok, %Link{} = link} <- Links.create_link(link_params) do
conn
|> put_status(:created)
|> put_resp_header("location", Routes.link_path(conn, :show, link))
|> render("show.json", link: link)
end
end
defp check_url_existence(conn, _) do
if is_nil(conn.params["url"]) do
conn
|> put_status(:bad_request)
|> put_view(ShortyWeb.ErrorView)
|> render("400.json")
end
conn
end
テスト:
test "returns an error without a url", %{ conn: conn } do
response =
conn
|> post("/shorten", %{})
|> json_response(400)
assert response["errors"] != %{}
end
結果:
1) test shortcode generation returns an error without a url (ShortyWeb.LinkControllerTest)
test/shorty_web/controllers/link_controller_test.exs:58
** (RuntimeError) expected response with status 400, got: 422, with body:
{"errors":{"url":["can't be blank"]}}
code: |> json_response(400)
stacktrace:
(phoenix) lib/phoenix/test/conn_test.ex:373: Phoenix.ConnTest.response/2
(phoenix) lib/phoenix/test/conn_test.ex:419: Phoenix.ConnTest.json_response/2
test/shorty_web/controllers/link_controller_test.exs:62: (test)
郵便配達員の結果: https://prnt.sc/qdy2bo