Как откатить изменения, внесенные в базу данных браузером Wallaby Automation - PullRequest
0 голосов
/ 23 февраля 2020

У меня есть длинный тест, который вызывает много функций, которые тестируют все приложения. Я искал способ, чтобы в случае неудачи в тесте я мог откатить указанные c изменения, которые автоматизация внесла в тест.

Например:

test "add user and login", session do
  session
  |> add_user()
  # There can be more functions here...
end

def add_user(session, loops // 2) do
  try do
    session
    |> visit("example.com")
    |> fill_in(css("#user_name", with "John Doe")
    |> click(css("#add_user_button"))
    |> assert_has(css("#user_added_successfully_message")
  rescue
    msg -> if loops > 0, do: add_user(session, loops - 1), else: raise msg 
  end
end

In В случае сбоя в функции assert_has (пользователь добавил, но сообщение не отображается), я хочу откатить все изменения, произошедшие в базе данных, до того, как функция add_user снова будет вызвана при восстановлении.

1 Ответ

0 голосов
/ 26 февраля 2020

Если вы используете 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 по какой-либо причине, хорошим вариантом может быть запуск транзакции базы данных. сами и разделите связь между вашим тестом и тестируемым кодом. Таким образом, вы можете вручную откатываться после каждого теста.

...