"expected ExUnit callback" while running Absinthe Tests

Hello

I create a graphql API according to the book “Craft graphql apis in elixir with absinthe”.

When I create tests, I run into an error:

  1) test Category field returns category items (BiidiWeb.Schema.Query.CategoryTest)
 test/biidi_web/schema/query/category_test.ex:15
 ** (RuntimeError) expected ExUnit callback in BiidiWeb.Schema.Query.CategoryTest to return :ok | keyword | map, got %Biidi.Category{__meta

__: ecto.Schema.Metadata<:loaded, “categories”>, id: 4, inserted_at: ~N[2018-09-18 20:19:16.469878], title: “other”, updated_at: ~N[2018-09-18
20:19:16.469890]} instead
stacktrace:
(ex_unit) lib/ex_unit/callbacks.ex:368: ExUnit.Callbacks.raise_merge_failed!/2

I searched in Google and in the Forum, but cause I’m new in Elixir and Phoenix I don’t get a propper understanding of the occurring issue.

Here is a working dockerized copy reduced to the failing part:
https://gitlab.com/birdnestman/biidi_test

You can run docker-compose, create DB, migration and then run the test…

Thank you for any help!

Got it. The error appears in the “setup do”

I forgot to add
“:ok”
to the end of the seeds file…

7 Likes

life saver.

1 Like

Sorry im new to doing test cases, can anyone share with me how do you seed data for specific test case?

e.g.

  describe "files" do
    alias Myproject.Documents.File
    import Myproject.DocumentsFixtures

    @invalid_attrs %{title: nil, tmp_file_id: nil}

    # QUESTION: What is the proper way to do this and i have a seeder script to run it in other environments
    setup do
      status = [
        %{id: 1, title: "Queueing"},
        %{id: 2, title: "Processing"},
        %{id: 3, title: "Error"},
        %{id: 4, title: "Completed"}
      ]

      for %{id: sid} = s <- status do
        case Repo.get(Status, sid) do
          nil -> struct(Status, s) |> Repo.insert!(on_conflict: :nothing)
          es -> es |> Status.changeset(s) |> Repo.update!(on_conflict: :nothing)
        end
      end

      %{file: file_fixture()}
    end

    test "list_files/0 returns all files", %{file: file} do
      assert Documents.list_files() == [file]
    end

    # ...

Thanks in advance!!!

Best wishes,
Jing Hui PANG

If you only need it for that particular test, i suggest to use a fixture too for the states.

If you want to use different seeds in general, have a look at this post: How to seed database for testing? - #3 by ThrashAbaddon