Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to rollback, reset, or drop Ecto test database?

Usually mix.test cleans the test database, but it is not working.

It may be because I was playing around with making a users schema, but didn't want to use what I made so I got rid of it. I then started over and made a new schema for users which was different from the first.

When I tried to run mix test again, there was an error that some fields did not exist which should have been there with the new schema.

like image 235
Katherine Avatar asked Feb 10 '17 14:02

Katherine


Video Answer


2 Answers

You can access the test database by using MIX_ENV=test followed by a command such as mix do ecto.drop, mix ecto.reset or mix ecto.rollback.

In this particular case, I used:

MIX_ENV=test mix ecto.reset 

If your application has multiple repos (DBs), you'll want to specify a specific repo to avoid applying the operation to all repos. For example

mix ecto.drop --repo Order.Repo 

To find out more about an Ecto task, use mix help <task>

like image 99
Katherine Avatar answered Sep 24 '22 10:09

Katherine


You can set aliases into mix.exs like this

defp aliases do   [    "ecto.setup": ["ecto.create", "ecto.migrate", "run priv/repo/seeds.exs"],    "ecto.reset": ["ecto.drop", "ecto.setup"],    "test":       ["ecto.create --quiet", "ecto.migrate", "test"]   ] end 

And you need to run database into sandbox mode.

Your /appdir/test/test_helper.exs should be like this

Ecto.Adapters.SQL.Sandbox.mode(ProjectName.DB.Repo, {:shared, self()}) ExUnit.start(exclude: [:pending]) 

And /appdir/config/test.exs like this

config :project_name, ProjectName.DB.Repo,   pool: Ecto.Adapters.SQL.Sandbox,   database: "database_name_test" 
like image 31
Oleg Samorai Avatar answered Sep 20 '22 10:09

Oleg Samorai