Spec-Zone.ru › Phoenix

Тестирование с Ecto

Исходный код

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

Создайте файл config/test.exs или добавьте в него следующее содержимое:

import Config

config :my_app, MyApp.Repo,
  username: "postgres",
  password: "postgres",
  database: "myapp_test",
  hostname: "localhost",
  pool: Ecto.Adapters.SQL.Sandbox

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

Не забудьте импортировать конфигурацию тестового окружения в самом конце config/config.exs:

import_config "#{config_env()}.exs"

Также необходимо добавить в конце test/test_helper.exs явное указание режима sandbox:

Ecto.Adapters.SQL.Sandbox.mode(MyApp.Repo, :manual)

Наконец, необходимо установить подключение к базе данных перед запуском тестов. Это можно включить для всех тестовых случаев, расширив шаблон ExUnit, или настроить отдельно для каждого теста. Начнём с первого варианта и поместим его в test/support/repo_case.ex:

defmodule MyApp.RepoCase do
  use ExUnit.CaseTemplate

  using do
    quote do
      alias MyApp.Repo

      import Ecto
      import Ecto.Query
      import MyApp.RepoCase

      # and any other stuff
    end
  end

  setup tags do
    pid = Ecto.Adapters.SQL.Sandbox.start_owner!(MyApp.Repo, shared: not tags[:async])
    on_exit(fn -> Ecto.Adapters.SQL.Sandbox.stop_owner(pid) end)
    :ok
  end
end

Приведённый выше шаблон тестового случая добавляет функции Ecto и Ecto.Query в ваши тесты и получает подключение к базе данных. Если тест выполняется не асинхронно, он также включает общий режим подключения к песочнице. Дополнительные сведения см. в разделе Ecto.Adapters.SQL.Sandbox.

Чтобы добавить папку test/support/ для компиляции в тестовом окружении, необходимо обновить конфигурацию mix.exs

  def project do
    [
      # ...
      elixirc_paths: elixirc_paths(Mix.env())
    ]
  end

  # Specifies which paths to compile per environment.
  defp elixirc_paths(:test), do: ["lib", "test/support"]
  defp elixirc_paths(_), do: ["lib"]

Затем в каждом тесте, использующем репозиторий:

defmodule MyApp.MyTest do
  use MyApp.RepoCase

  # Tests etc...
end

Если вы не хотите определять «шаблон тестового случая», можно получить подключение для каждого отдельного тестового случая:

defmodule MyApp.MyTest do
  use ExUnit.Case

  setup do
    :ok = Ecto.Adapters.SQL.Sandbox.checkout(MyApp.Repo)
  end

  # Tests etc...
end

Для удобства можно также определить aliases, чтобы автоматически настраивать базу данных при запуске тестов. Измените следующее содержимое в файле mix.exs.

  def project do
    [app: :my_app,

     ...

     aliases: aliases()]
  end

  defp aliases do
    [ ...
     "test": ["ecto.create --quiet", "ecto.migrate", "test"]
    ]
  end
← Предыдущая страница Фабрики тестовых данных

Пакет Hex Предпросмотр на Hex (текущий файл) Посмотреть llms.txt Скачать версию ePub

Создано с помощью ExDoc (v0.40.2) для языка программирования Elixir

© 2014 Chris McCord
Licensed under the MIT License.
https://ecto.hexdocs.pm/testing-with-ecto.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API