0

基本的なアプリケーションがあり、コントローラーでプラグを使用しようとしました。リクエストボディに「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

4

1 に答える 1