web-dev-qa-db-fra.com

Comment restaurer, réinitialiser ou supprimer la base de données de test Ecto?

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.

24
Katherine

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>

41
Katherine

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"
4
Oleg Samorai