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.
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>
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"
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With