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
запускает тесты с вашим пользовательским форматером.
Надеюсь, что одно из них - подходящее решение для вас!