A while back I started working on my Hex Package, Ecto.Rut, that provides simple wrapper methods for Ecto models. I’m now trying to write tests for this package, but I have absolutely no idea how to do start Ecto and call a defined schema’s methods during tests. I need to get Ecto running, create/migrate the db before each test and drop it after each test.
I understand that the file test_helper.exs is called beforehand, and this is where I need to put my test model’s schema and run the migrations - but I don’t have the proper direction on how to achieve this.
I borrowed a lot of the setup from somewhere else (probably Ecto itself), but maybe give the tests in my project a once over to see how you should start Ecto, run migrations, etc.
Thank you @adam12 so much! This was exactly what I needed. I had to make a few changes, but I got it running. This is what my new test_helper looks like:
ExUnit.start()
Code.require_file("test_project.exs", __DIR__)
alias Ecto.Rut.TestProject
# Clean up DB (Do this before every test)
defmodule TestProject.Utils do
def cleanup do
Ecto.Migrator.down TestProject.Repo, 0, TestProject.Migration, log: false
Ecto.Migrator.up TestProject.Repo, 0, TestProject.Migration, log: false
end
end
# Start Ecto
{:ok, _} = Ecto.Adapters.Postgres.ensure_all_started(TestProject.Repo, :temporary)
_ = Ecto.Adapters.Postgres.storage_down(TestProject.Repo.config)
:ok = Ecto.Adapters.Postgres.storage_up(TestProject.Repo.config)
{:ok, _pid} = TestProject.Repo.start_link