ExUnit - запустить все тесты, хранящиеся в пользовательском каталоге (не tests/)

Я хочу, чтобы в моем проекте Elixir было два отдельных набора модульных тестов, которые я могу запускать отдельно с разными конфигурациями ExUnit. Я работаю над модулем форматирования ExUnit и пытаюсь написать для него модульные тесты. Чтобы проверить это, я решил создать еще один каталог (example_tests) содержащий test_helper.exs файл с похожим на тот, в test/, но с ExUnit, настроенным для использования моего пользовательского форматера. Я добавил свой модуль форматирования в качестве модуля форматирования ExUnit, а затем создал тестовый модуль example_tests, Проблема в том, что теперь я не знаю, как настроить ExUnit для запуска всех тестов в example_tests/ с конфигурацией, указанной в example_tests/test_helper.exs,

Я нашел там test_paths параметр конфигурации, который может быть установлен в mix.exs файл. Проблема в том, что значение устанавливается для каждого проекта, и мне нужно, чтобы оно имело два разных значения (обычно просто ["test"] но потом для тестового прогона с форматером ["example_tests"]). Я предполагал, что могу переопределить значения конфигурации для каждой задачи, поэтому я также создал задачу example_tests, но я не могу понять, как изменить конфигурацию.

Есть ли способ настроить конфигурацию проекта ( Mix.Project.config ), для каждой задачи? Или есть ли лучший способ создать два отдельных набора тестов с разными конфигурациями ExUnit?

Обновить:

Вот ссылка на исходный код для test Смешанное задание: https://github.com/elixir-lang/elixir/blob/master/lib/mix/lib/mix/tasks/test.ex

1 ответ

Вы можете поместить более одного пути в test_pathsдо тех пор, пока они оба имеют файл test_helper.exs, при выполнении тестов по заданному пути они выполняются с использованием помощника по тестированию для этого пути. Так что-нибудь под test Вы можете использовать форматтер по умолчанию, но затем все что угодно под example_test может работать с вашим пользовательским форматером.

Вы также можете запустить ExUnit.configure(formatters: [MyFormatter]) в setup_all обратный вызов для данного тестового модуля, так что все тесты в этом модуле используют ваш форматтер и используют on_exit обратный вызов, чтобы переключить его обратно по умолчанию. Вам может понадобиться установить async: false хотя для ваших тестов, так как я думаю, что конфигурация форматера является глобальной для всех тестов - либо это, либо использовать атрибут moduletag (например, @moduletag :custom_formatter), чтобы отметить, к какой группе следует запустить набор тестов, а затем использовать mix test --include custom_formatter а также mix test --exclude custom_formatter только чтобы выполнить эти тесты вместе как группа. Затем используйте псевдонимы смешанных задач, чтобы упростить свою жизнь (например, mix test запускает тесты с форматером по умолчанию и mix test.custom запускает тесты с вашим пользовательским форматером.

Надеюсь, что одно из них - подходящее решение для вас!

Другие вопросы по тегам