chgeuer
Problem with data-driven test case generation
Hi,
I’m trying to generate test cases from a JSON file. However, when I try the quote/unquote mechanism, it compiles but doesn’t find tests.
test/input.json
{
"[1,2,3]": [ 1, 2, 3 ],
"true": true,
"{\"s\":1}": { "s": 1 }
}
tests/my_test.exs (working, finding three tests)
This is based on the @ AndyL discussion on ExUnit Data-driven Tests. I would like to get rid of the @expression stuff.
defmodule MyTest do
import MyTestHelper, only: [parses_to: 2]
use ExUnit.Case, async: true
with {:ok, body} <- File.read(Path.join([__DIR__, "input.json"])),
{:ok, json} <- Poison.decode(body) do
Enum.each(json, fn {expression, result} ->
@expression expression
@result result
@expression |> parses_to(@result)
end)
end
end
tests/my_test.exs (not working, not finding any test)
defmodule MyTest do
import MyTestHelper, only: [parses_to: 2]
use ExUnit.Case, async: true
with {:ok, body} <- File.read(Path.join([__DIR__, "input.json"])),
{:ok, json} <- Poison.decode(body) do
Enum.each(json, fn {expression, result} ->
quote do
unquote(expression) |> parses_to(unquote(result))
end
end)
end
end
tests/test_helper.exs
ExUnit.start()
defmodule MyTestHelper do
use ExUnit.Case
defmacro parses_to(expression, expected) do
quote do
test "Expression \"#{unquote(expression)}\"" do
assert unquote(expected) === unquote(expression) |> Poison.decode!()
end
end
end
end
Most Liked
chgeuer
Thanks @hauleth, unfortunately that doesn’t solve the problem. I uploaded the code to chgeuer/ex_problem_repro1 for easier testing. When I replace
@expression expression
@result result
@expression |> parses_to(@result)
with
parses_to(expression, result)
it says
-
variable "result" is unusedand variable "result" does not exist and is being expanded to "result()"(CompileError) test/my_test.exs:15: undefined function expression/0
1
Popular in Questions
What is the proper way to load a module from a file in to IEX?
In the python world, doing something like this pretty standard:
from ....
New
As a follow up to my earlier question:
I have the code compiling and running but not getting a successful login from the rest server. ...
New
Hey guys.
I'm new to elixir and im really stocked about it. But I ran into a bit of problem - I need to convert a date sting, for examp...
New
What is most correct way to open, read and parse JSON file with poison?
For example if we have example.json file in root of some projec...
New
Hello, can anybody help here..? I have a list of players and I what to delete an element, but every for loop the list is reverting to ori...
New
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
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
Currently suffering from paralysis by [HTTP client] analysis. This is rather unusual in Elixirland as there tends to be consensus on the ...
New
Can someone explain the settings of pool_size of Ecto in config file? and what is the recommend size?
Thanks
New
Hi,
I have to write a raw query for one of my project. But till now I have used ecto queries and don’t have much experience writing raw ...
New
Other popular topics
Update:
How to use the Blogs & Podcasts section
You can post links to your blog posts or podcasts either in one of the Official Blog...
New
How to handle excepions in elixir? Suppose i have A, B, C ,D, E modules. and each module has get() function. A.get() method will call th...
New
Okay, I'm having a heck of a time trying to figure out how to best handle the validation of belongs_to associations in Ecto. I'm sure I'...
New
I want to try my hand at web scraping. What tools/libraries do I need to use. I’m hoping to turn this into something professional so don’...
New
Elixir plugin for JetBrain’s IntelliJ Platform (including Rubymine)
This is a plugin that adds support for Elixir to JetBrains IntelliJ...
New
I’m working on defining a simple Ecto schema for a table (in PostGres), but I don’t see where I can define a column as NOT NULL. Conside...
New
I am using Ecto timestamps with postgres, I can see the timestamps() use the :naive_dateime but for my use case I wanted to store the ti...
New
Hi guys, i’m new in the Elixir world, and i have to say, that i love it!
i’m having some problem to understand anonymous functions with ...
New
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
Hello again - after a longish gap I’ve decided I really must dig into Elixir and see what’s been happening here - so I have a few questio...
New







