Тестирование Graphql Query не возвращает правильно результат в Phoenix
Привет всем, я просто новичок в Elixir, как правило, новичок в FP. В общем, я пытаюсь изучить Elixir, а затем перейти к созданию api-сервера graphql.
Я прочитал книгу "Создание API-интерфейсов GraphQL в 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
Вот что я пытаюсь сделать, я заметил, что на моем локальном компьютере, когда я делаю запрос, он использует метод 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"}]}}%
2 ответа
Вы уже проверили, содержит ли ваша тестовая база данных те же данные, что и ваша база данных разработчиков? Путь по умолчанию в Phoenix - использовать разные среды для test/dev/prod, и поэтому вы должны найти соответствующие .exs
файл в папке config вашего проекта, и это также место, где определяется подключение к вашей базе данных для среды test/dev/prod.
Когда вы начинаете Феникс с iex -S mix phx.server
ваша среда должна быть dev по умолчанию (если ваш MIX_ENV
пустой).
Просто ради полноты: вы можете выполнить MIX_ENV=test iex -S mix phx.server
тогда вы будете использовать тестовую среду и, следовательно, сможете проверить с помощью команды CURL, возвращает ли ваш запрос результат для test
окружающая среда / базы данных.
Я думаю, что вы просто отправляете свои данные неправильно. Ваш curl
Команда использует тело запроса с типом содержимого, установленным в json. Однако в вашем тесте на эликсир используется список ключевых слов, который преобразуется в составные данные.
Вы можете попробовать переключить тест на полезную нагрузку 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