2017-02-10 1 views
9

Обычно mix.test очищает базу данных тестов, но не работает.Как откат, сброс или падение базы данных испытаний Ecto?

Возможно, потому, что я играл с созданием схемы users, но не хотел использовать то, что я сделал, поэтому я избавился от него. Затем я начал работу над новой схемой для пользователей, которая отличалась от первой.

Когда я попытался снова запустить тест микширования, произошла ошибка в том, что некоторые поля не существовали, что должно было быть там с новой схемой.

ответ

18

Вы можете получить доступ к тестовой базе данных с помощью MIX_ENV=test следуют команды, такие как mix do ecto.drop, mix ecto.reset или mix ecto.rollback.

В данном конкретном случае я использовал MIX_ENV=test mix ecto.reset.

2

Вы можете установить псевдонимы в mix.exs как этот

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" 
Смежные вопросы