Habituellement mix.test
nettoie la base de données de test, mais elle ne fonctionne pas.
C'est peut-être parce que je jouais avec la création d'un schéma users
, mais que je ne voulais pas utiliser ce que j'avais fait, je m'en suis donc débarrassé. J'ai ensuite recommencé et créé un nouveau schéma pour les utilisateurs qui était différent du premier.
Lorsque j'ai essayé de relancer le test de mixage, il y avait une erreur que certains champs n'existaient pas qui auraient dû être là avec le nouveau schéma.
Vous pouvez accéder à la base de données de test à l'aide de MIX_ENV=test
suivi d'une commande telle que mix do ecto.drop
, mix ecto.reset
ou mix ecto.rollback
.
Dans ce cas particulier, j'ai utilisé MIX_ENV=test mix ecto.reset
.
Si votre application possède plusieurs référentiels (DB), vous souhaiterez spécifier un référentiel spécifique pour éviter de s'appliquer à l'opération à tous les référentiels. Par exemple
mix ecto.drop --repo Order.Repo
Pour en savoir plus sur une tâche Ecto, utilisez mix help <task>
Vous pouvez définir des alias dans mix.exs comme ceci
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
Et vous devez exécuter la base de données en mode sandbox.
Votre /appdir/test/test_helper.exs devrait ressembler à ceci
Ecto.Adapters.SQL.Sandbox.mode(ProjectName.DB.Repo, {:shared, self()})
ExUnit.start(exclude: [:pending])
Et /appdir/config/test.exs comme celui-ci
config :project_name, ProjectName.DB.Repo,
pool: Ecto.Adapters.SQL.Sandbox,
database: "database_name_test"