oliveiragahenrique
Doctest that perform I/O operations
I’m building a very simple application, every time you call ModuleX.get(id) the system perform the folowing actions:
- Search for
idon database - If sucess, return the id’s related value
- Otherwise create a default data structure and save it on the database under the
idkey
The problem is my docTests are failing because I use the same id on all of them. Because of it, operations on former tests impact on the result of the later ones, because of the data was persisted
Questions:
- Am I using doctests wrong?
- There is a way to perform a delete operation after each doctest?
- How did you guys would approach this problem?
Marked As Solved
oliveiragahenrique
I managed to make it work using the setup macro as following:
setup do
# Get the pids of all currently alive processes
accounts_used_pids =
DynamicSupervisor.which_children(Account.Cache)
|> Stream.map(fn entry ->
case entry do
{_, pid, :worker, [Account.Server]} -> pid
_ -> nil
end
end)
|> Enum.filter(fn ele -> ele !== nil end)
# Terminate all processes
Enum.each(accounts_used_pids, &Process.exit(&1, :clean_up))
# Reset the "database"
File.rm_rf(Account.Database.folder_path())
File.mkdir_p!(Account.Database.folder_path())
:ok
end
The setup macro runs the code inside it after each test case. So I clean up the database and terminate all processes related to the account, after every test case.
It might not be the optimal solution, but work for me! Thank you so much for the help!
Also Liked
ityonemo
- this seems very ambitious for a doctest.
- are you using ecto sandboxes? I’m not 100% sure, but It should clean up after each doctest group. Try separating each of your cases into distinct ``` groups.
1
qhwa
- No, there’s nothing wrong with it.
- Yes, as mentioned by @ityonemo, Ecto’s sandbox adapter helps. What’s inside your
test/test_helper.exs?
1
Popular in Questions
After calling mix ecto.create I get this error:
17:00:32.162 [error] GenServer #PID<0.412.0> terminating
** (Postgrex.Error) FATAL...
New
In the Dialyzer docs ( http://erlang.org/doc/man/dialyzer.html#requesting-or-suppressing-warnings-in-source-files ), there is a way to tu...
New
Hi, I’m using Ubuntu 18.04 and after updating to OTP-24.0 yesterday i have this warning when I run “mix local.hex”:
14:57:30.512 [warn] ...
New
Student & New to elixir. Nice language.
I want to convert a english character, e.g. “a”, which is stored in a variable, to it’s asci...
New
I want to know absolute current module path. In python i could do that: os.path.abspath(__file__) Does elixir have anything similar?
New
Hi,
I'm quite new in Elixir and I'm trying to format a string to a PEM format. I have the certificate value like MIIDBTCCAe2...... and ...
New
Hello everybody,
usually, I use a 29" ultra-wide monitor for VSCode which can easily accomodate explorer (files panel) + file with code ...
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
Using vs code and installed ElixirLS: support and debugger.
And I got an error popped up on start up says
Failed to run ‘elixir’ comma...
New
Manning 2016 Halloween weekend sale via Deal of the Day
Friday, October 28 - Half off all MEAPs - code WM102816LT
Saturday, October 29 ...
New
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
Good day to you all.
I have been struggling to get a query involving like and ilike to work.
Can anyone assist me on this, please?
pro...
New
You’re a programmer, so you don’t need spoon feeding with the conventional drivel about “this is an integer.” No. You need to know what’s...
New
Hi, this is for people who, like me, have had some friction using .html.heex templates in VSCode.
The solution seems to be, in a hyphena...
New
How to set Jason to encode all fields in ecto schema, I don’t care about security and implementing only is taking long list of attributes...
New
Hi,
I'm quite new in Elixir and I'm trying to format a string to a PEM format. I have the certificate value like MIIDBTCCAe2...... and ...
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,
I am new to Elixir. I am trying to use the DateTime component to insert a date into MySQL however the there seems to be no way to fo...
New







