みなさん、こんにちは。私は 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"}]}}%