Если вы используете Ecto
для доступа к БД везде, вы можете использовать режим песочницы .
Скорее всего, вы хотите настроить пул песочницы в вашем config/test.exs
( если его там еще нет):
config :my_app, Repo, # my_app being the name of the application that holds the Repo
pool: Ecto.Adapters.SQL.Sandbox
Затем в вашем test_helper или тестах сделайте что-то вроде этого:
setup do
:ok = Ecto.Adapters.SQL.Sandbox.checkout(Repo)
Ecto.Adapters.SQL.Sandbox.mode(Repo, {:shared, self()})
end
При этом все ваши тесты будут выполняться в отдельных транзакциях и впоследствии откатываться , Также приведенное выше гарантирует, что все процессы используют одно и то же соединение и видят одинаковые данные транзакции (см. Режим :shared
в документации). Этот пример взят из документов , где есть дополнительная информация по этому вопросу.
Если вы не можете использовать режим песочницы Ectos по какой-либо причине, хорошим вариантом может быть запуск транзакции базы данных. сами и разделите связь между вашим тестом и тестируемым кодом. Таким образом, вы можете вручную откатываться после каждого теста.