Как откат, reset или падение базы данных тестирования Ecto?
Обычно mix.test
очищает тестовую базу данных, но она не работает.
Возможно, потому, что я играл с созданием схемы users
, но не хотел использовать то, что сделал, поэтому я избавился от него. Затем я начал работу и создал новую схему для пользователей, которая отличалась от первой.
Когда я снова попытался запустить тест микширования, произошла ошибка в том, что некоторые поля не существовали, что должно было быть там с новой схемой.
Ответы
Ответ 1
Вы можете получить доступ к тестовой базе данных, используя MIX_ENV=test
, а затем такую команду, как mix do ecto.drop
, mix ecto.reset
или mix ecto.rollback
.
В данном конкретном случае я использовал:
MIX_ENV=test mix ecto.reset
Если ваше приложение имеет несколько репо (БД), вам нужно указать конкретное репо, чтобы избежать применения операции ко всем репо. Например,
mix ecto.drop --repo Order.Repo
Чтобы узнать больше о задаче Ecto, используйте mix help <task>
Ответ 2
Вы можете установить псевдонимы в mix.exe, как это
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
И вам нужно запустить базу данных в режиме песочницы.
Ваш/appdir/test/test_helper.exs должен выглядеть следующим образом:
Ecto.Adapters.SQL.Sandbox.mode(ProjectName.DB.Repo, {:shared, self()})
ExUnit.start(exclude: [:pending])
И/appdir/config/test.exs вроде этого
config :project_name, ProjectName.DB.Repo,
pool: Ecto.Adapters.SQL.Sandbox,
database: "database_name_test"