Help on testing with Absinthe

Hey guys,

I’m relatively new to Elixir world. Currently I’m working on a GraphQL API with Absinthe. All is going right, I have done some logic, some tests to the business logic layer, etc.

Now I’m trying to test my web layer (resolvers), but every time I’m stuck getting this response every time I try to make a request from ExUnit.

%{
  "errors" => [
    %{
      "locations" => [%{"column" => 1, "line" => 1}],
      "message" => "Parsing failed at `--plug_con`"
    }
  ]
}

The app works just fine from Postman, here it’s my test file

defmodule Test.Web.Resolver.Session do
  alias Mix.Tasks.Phx.Routes
  use Test.Setup.ConnCase, async: true

  @login_mutation """
  query GetUser($id: ID!){
    user(id: $id) {
        id,
        email,
        firstName,
        posts {
            id,
            title
        }
    }
  }
  """

  setup %{conn: conn} do
    :ok
  end

  test "prueba", %{conn: conn} do
    conn =
      post(conn, "/api/graphql", %{
        "mutation" => @login_mutation,
        "variables" => %{id: 1}
      })

    IO.inspect(conn)
    IO.inspect(json_response(conn, 200))
  end
end

Any idea why is this happening?

Hi @crisdegraciadev welcome! That is a very strange error, I’ve never seen it before.

There are definitely a few things that are strange about your test though.

  1. You have something called @login_mutation that is a graphql query, not a mutation. It also doesn’t look like it does a login
  2. you are using the "mutation" key for the document, but the document key in the POST body should always be "query" whether it’s a mutation doc or otherwise

Are you able to put your code up somewhere that I can see this happen?

1 Like

Nvm, I though that If it was a mutation I should call it mutation instead of query :slight_smile:.

About the mess with @login_mutation, I was testing some things, but now i’t solved as working.
Thanks!

It helps future readers if you show how you solved it.

1 Like

I did it :sweat_smile:

I though that If it was a mutation I should call it mutation instead of query

I just ran into this as well.

Just to clarify, the problem here was @benwilson512 's (2):

you are using the "mutation" key for the document, but the document key in the POST body should always be "query" whether it’s a mutation doc or otherwise

So this:

post(conn, "/api/graphql", %{
  "mutation" => @login_mutation,
  "variables" => %{id: 1}
})

Should have been this:

post(conn, "/api/graphql", %{
  "query" => @login_mutation,
  "variables" => %{id: 1}
})
1 Like