大家好,我是 Elixir 的新手,一般是 FP 的新手。所以基本上我尝试学习 Elixir,然后跳到构建一个 graphql api 服务器。
我阅读并遵循了《用苦艾酒在 Elixir 中制作 GraphQL APIs》一书,并坚持对 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
这是我尝试的,我注意到在我的本地机器上,当我进行查询时,它使用 POST 方法而不是 GET 方法,所以我将其更改为发布:
@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"}]}}%