0

みなさん、こんにちは。私は Elixir を初めて使いましたが、一般的に FP は初めてです。だから基本的に私はElixirを学ぼうとし、その後graphql APIサーバーの構築にジャンプします。

私は本「Craft GraphQL APIs in Elixir with Absinthe」を読んでフォローし、graphql クエリのテストに行き詰まりました。

その本には次のように書かれていました。

test "menuItems field returns menu items" do
  conn = build_conn()
  conn = get conn, "/api", query: @query
  assert json_response(conn, 200) == %{
   "data" => %{
     "menuItems" => [
       //key-value pair
     ]
   }
  }
end

これが私が試みたものです。ローカルマシンでクエリを作成すると、GETメソッドではなくPOSTメソッドが使用されることに気付きました。代わりに投稿するように変更します。

@query """
{
  courses {
    name
  }
}
"""

test "courses field returns courses" do
  conn = build_conn()
  conn = post conn, "/api/graphiql", query: @query
  assert json_response(conn, 200) === %{
    "data" => %{
      "courses" => [
        %{"name" => "BSIT"},
        %{"name" => "BSCS"},
        %{"name" => "BSBA"}
      ]
    }
  }
end

次に、テストを実行すると、クエリが空の結果を返すため失敗します。

Assertion with === failed
  code:  assert json_response(conn, 200) === %{"data" => %{"courses" => [%{"name" => "BSIT"}, %{"name" => "BSCS"}, %{"name" => "BSBA"}]}}
  left:  %{"data" => %{"courses" => []}}
  right: %{"data" => %{"courses" => [%{"name" => "BSIT"}, %{"name" => "BSCS"}, %{"name" => "BSBA"}]}}
  stacktrace:
    test/voting_system_web/query/course_test.exs:15: (test)

次に、curl を使用してクエリをテストすると、クエリが機能し、結果が返されます。

 curl -X POST -H "Content-Type: application/json" --data '{ "query": "{ courses { name } }"}' http://localhost:4000/api/graphiql
 {"data":{"courses":[{"name":"BSIT"},{"name":"BSCS"},{"name":"BSBA"}]}}% 
4

2 に答える 2

1

単にペイロードを間​​違った方法で送信していると思います。コマンドは、コンテンツ タイプがjsoncurlに設定されたリクエスト ボディを使用します。ただし、エリクサー テストでは、マルチパート データに変換されるキーワード リストを使用します。

テストを JSON POST ペイロードに切り替えて、クエリを適応させることができます。

@query """
query {
  courses {
    name
  }
}
"""

test "courses field returns courses" do
  conn = build_conn() |> put_req_header("content-type", "application/json")
  conn = post conn, "/api/graphiql", @query
  assert json_response(conn, 200) === %{
    "data" => %{
      "courses" => [
        %{"name" => "BSIT"},
        %{"name" => "BSCS"},
        %{"name" => "BSBA"}
      ]
    }
  }
end
于 2018-09-08T19:34:44.953 に答える