wolfiton

wolfiton

Error on absinthe test

Hi everyone,

I can’t figure out if what I am doing in wormwood is a bug or a bad implementation. I also looked over the library source code and couldn’t figure this out.

So here is the problem:

If I create a schema like this it doesn’t passes the test

@desc "Queryable fields for Blog Articles"
  query do
    field :blog_articles, list_of(:blog_article) do
      resolve(fn _, _, _ ->
        {:ok, Blog.list_articles()}
      end)
    end
  end

  @desc "define fileds that can be acessed for Blog queries"
  object :blog_article do
    field :id, :id
    field :title, :string
  end
end

Error trace:

mix test test/abs_wow_web/schema/queries/blog_article_test.ex                             


  1) test GetArticles.gql Should return a list of all the Articles (all 2 of them) (AbsWowWeb.BlogArticleTest)
     test/abs_wow_web/schema/queries/blog_article_test.ex:12
     ** (ArgumentError) argument error
     code: assert length(articles) == 2
     stacktrace:
       :erlang.length(nil)
       test/abs_wow_web/schema/queries/blog_article_test.ex:17: (test)



Finished in 0.3 seconds
1 test, 1 failure

But if i do it like this it passes the test with no problems:

@desc "Queryable fields for Blog Articles"
  query do
    field :articles, list_of(:article) do
      resolve(fn _, _, _ ->
        {:ok, Blog.list_articles()}
      end)
    end
  end

  @desc "define fileds that can be acessed for Blog queries"
  object :article do
    field :id, :id
    field :title, :string
  end
end

I also created a minimal example here with the problem GitHub - wolfiton/abs_wow · GitHub

Can someone explain to me if this is a bug or if i am doing something wrong?

Thanks

Marked As Solved

Darin

Darin

Hello again @wolfiton,

I pulled down your code and I think I know what the problem is.

After I got it to run (more on that in the bottom) I saw that the error it threw was

%{
  errors: [
    %{
      locations: [%{column: 0, line: 5}],
      message: "Unknown fragment \"ArticleFields\""
    }
  ]

What I did was went directly into GetArticles.gql and copied the fragment from ArticleFields.frag.gql so that it looked like this. After that it ran fine. It seems like there is an issue in the import you are doing.

query {
  BlogArticles {
    id
    title
  }
}

If you want to get the fragment import to work you need to do a few things.

  1. You are importing from ./ArticleFields.gql but the file is called ArticleFields.frag.gql
  2. The fragment inside ArticleFields.gql is called BlogArticleFields, but in your query you are just using ArticleFields.
  3. Your import statement was incorrectly formatted. Yours: # import ./ArticleFields.gql. What it needs to be: #import "./ArticleFields.frag.ql" Notice there is no space between # and import, and that the file name is quoted.

So, by fixing the import and using the correct fragment name it should all work fine.

Also, as an aside, make sure you can run any code that you upload for others to test. I had to rename a few files and comment out some code from what you uploaded to get mix test to run successfully. Just makes it a bit easier to get you the help you need.

Hope that helps.

Also Liked

benwilson512

benwilson512

Author of Craft GraphQL APIs in Elixir with Absinthe

When in doubt, IO.inspect. Specifically, IO.inspect this line: abs_wow/test/abs_wow_web/schema/queries/blog_article_test.ex at master · wolfiton/abs_wow · GitHub

You’re getting an error because your articles variable, defined on this line, is nil. abs_wow/test/abs_wow_web/schema/queries/blog_article_test.ex at master · wolfiton/abs_wow · GitHub. Using get_in is probably not the way you want to go, it just returns nil without giving you any insight into what’s going on. I’d probably rewrite your pattern match to be:

 assert {:ok, %{data: %{"BlogArticles" => articles}}} = result

This way if the result does not have articles you can at least see why.

wolfiton

wolfiton

I would like to request permission from @benwilson512 and @Darin to add you to the credits of the Readme in helping me create the abs_wow Wormwood example testing.

Would this be OK with you/?

I am asking because i live in Europe where GDPR is a serious issue.

Where Next?

Popular in Questions Top

qwerescape
Is there a way to get the call stack or stack trace at any point in the code? Not from exceptions, but an expression that returns how the...
New
mgjohns61585
Could someone help me? I’m making my first elixir program, number guessing game. I can’t figure out how to convert the user’s guess from ...
New
shahryarjb
Hello, I have map which I want to convert it to string like this: the map: %{last_name: "tavakkoli", name: "shahryar"} the string I ne...
New
stefanchrobot
What’s the safe way to decode a JSON string into a struct? I want to avoid calling String.to_atom. Jason.decode can give me a map with st...
New
hariharasudhan94
lets say i have a sample like a = 20; b = 10; if (a > b) do {:ok, "a"} end if (a < b) do {:ok, b} end if (a == b) do {:ok, "equa...
New
fayddelight
I tried installing elixir 1.11.2 erlang 23.3.4 via asdf in my zsh shell. Enabled the versions locally and globally. When I list them ...
New
bsollish-terakeet
Credo is smart enough to check for (something like) this: assert length(the_list) == 0 with this response: Checking if an enum is empt...
New
romenigld
I am trying to run a deploy with docker and I successfully runned with this command: docker build -t romenigld/blog-prod . but when I t...
New
nsuchy
Hi. I’ve noticed that Windows Powershell has it’s own IEX command and you cannot access Elixir’s IEX due to the conflict. This isn’t a cr...
New
hariharasudhan94
I would like to know what is the best IDE for elixir development?
New

Other popular topics Top

Darmani72
If I have a post route which an argument: post /my_post_route/:my_param1, MyController.my_post_handler How would get the post params ...
New
senggen
Erlang/OTP 25 [erts-13.2.2] [source] [64-bit] [smp:8:8] [ds:8:8:10] [async-threads:1] 15:22:35.803 [error] gen_event {lager_file_backend...
New
jononomo
I am trying to figure out how Mix knows whether the environment is test, dev, or prod – where is this set? Thanks.
New
aesmail
Hello guys, I have finally made it. I created an admin interface for a framework. It’s been on my todo list for years and with the curre...
New
saif
Hello everyone, Long time lurker first time poster here. I’ve recently begun working on Elixir full-time again! :raised_hands: It’s been...
New
rms.mrcs
Hi, I need to transform a list of numbers into a map where the keys are the indexes and the values are the original values of the list. ...
New
romenigld
I am trying to run a deploy with docker and I successfully runned with this command: docker build -t romenigld/blog-prod . but when I t...
New
joaquinalcerro
Hi there, I am working with Ecto-Postgresql and I need to call all of the records from a specific table but the table has 40,000 records...
New
WestKeys
Currently suffering from paralysis by [HTTP client] analysis. This is rather unusual in Elixirland as there tends to be consensus on the ...
New
sergio
Kind of like when jquery came out, it was super necessary. Existing drag and drop libraries have a bunch of baggage to support old browse...
New

We're in Beta

About us Mission Statement