mix test
Выполняет тесты для проекта.
Эта задача запускает текущее приложение, загружает test/test_helper.exs и затем последовательно требует все файлы, соответствующие шаблону test/**/*_test.exs.
Список файлов и/или каталогов может быть указан после имени задачи, чтобы выбрать файлы для выполнения:
mix test test/some/particular/file_test.exs mix test test/some/particular/dir
Тесты в проектах-оболочках могут выполняться из корневой директории путём указания полного пути к набору тестов, включая apps/my_app/test, в этом случае рекурсивные тесты для других приложений-потомков будут полностью пропущены:
# To run all tests for my_app from the umbrella root mix test apps/my_app/test # To run a given test file on my_app from the umbrella root mix test apps/my_app/test/some/particular/file_test.exs
Параметры командной строки
-
--color— включает цвет в выводе -
--cover— запускает инструмент покрытия. См. раздел "Покрытие" ниже -
--exclude— исключает тесты, соответствующие фильтру -
--export-coverage— имя файла для экспорта результатов покрытия. Действует только при использовании с--cover -
--failed— выполняет только тесты, которые в последний раз завершились неудачно -
--force— принудительно компилирует независимо от времени модификации файлов -
--formatter— устанавливает модуль форматирования, который будет выводить результаты. По умолчанию используется встроенный CLI-форматтер ExUnit -
--include— включает тесты, соответствующие фильтру -
--listen-on-stdin— выполняет тесты, а затем прослушивает стандартный ввод. Получение новой строки приведёт к повторному выполнению тестов. Очень полезно в сочетании с--staleи внешними командами, которые выдают вывод в стандартный вывод при изменениях в файловой системе -
--max-cases— устанавливает максимальное количество одновременно выполняемых тестов. Только тесты из разных модулей выполняются параллельно. По умолчанию равно удвоенному числу ядер -
--max-failures— набор тестов перестаёт оценивать тесты, когда достигается это количество неудачных тестов. Выполняет все тесты, если опущено -
--no-archives-check— не проверяет архивы -
--no-color— отключает цвет в выводе -
--no-compile— не компилирует, даже если файлы требуют компиляции -
--no-deps-check— не проверяет зависимости -
--no-elixir-version-check— не проверяет версию Elixir изmix.exs -
--no-start— не запускает приложения после компиляции -
--only— выполняет только тесты, которые соответствуют фильтру -
--partitions— устанавливает количество разбиений для разделения тестов. Этот параметр требует установки переменной окруженияMIX_TEST_PARTITION. См. раздел "Разбиение процессов операционной системы" для получения дополнительной информации -
--preload-modules— предварительно загружает все модули, определённые в приложениях -
--raise— генерирует исключение, если набор тестов завершился неудачно -
--seed— инициализирует генератор случайных чисел, используемый для рандомизации порядка тестов;--seed 0отключает рандомизацию -
--slowest— выводит информацию о времени выполнения для N самых медленных тестов. Автоматически устанавливает--traceи--preload-modules -
--stale— выполняет только тесты, которые ссылаются на модули, изменённые с момента последнего запуска тестов с--stale. Более подробную информацию об этом параметре можно найти в разделе "Параметр --stale" ниже -
--timeout— устанавливает таймаут для тестов -
--trace— выполняет тесты с подробным отчётом. Автоматически устанавливает--max-casesна1. Обратите внимание, что в режиме отслеживания таймауты тестов будут игнорироваться, так как таймаут установлен на:infinity
Конфигурация
Эти настройки можно задать в разделе def project вашего файла mix.exs:
:test_paths— список путей, содержащих файлы тестов. По умолчанию устанавливается в["test"], если каталогtestсуществует; в противном случае по умолчанию устанавливается[]. Ожидается, что все пути к тестам содержат файлtest_helper.exs:test_pattern— шаблон для загрузки файлов тестов. По умолчанию устанавливается в*_test.exs:warn_test_pattern— шаблон для сопоставления потенциально неправильно названных файлов тестов и отображения предупреждения. По умолчанию устанавливается в*_test.ex:test_coverage— набор параметров, передаваемых механизму покрытия
Фильтры
ExUnit предоставляет теги и функциональность фильтрации, которые позволяют разработчикам выбирать, какие тесты запускать. Наиболее распространённая функциональность — исключение некоторых конкретных тестов из запуска по умолчанию в файле помощника тестов:
# Exclude all external tests from running ExUnit.configure(exclude: [external: true])
Затем, при необходимости, эти тесты можно включить в запуск с помощью параметра --include:
mix test --include external:true
Приведённый выше пример выполнит все тесты, для которых параметр external установлен в true. Также возможно включить все примеры, имеющие заданный тег, независимо от его значения:
mix test --include external
Обратите внимание, что все тесты включаются по умолчанию, поэтому, если они не исключены предварительно (либо в файле помощника тестов, либо с помощью параметра --exclude), параметр --include не имеет эффекта.
По этой причине Mix также предоставляет параметр --only , который исключает все тесты и включает только указанные:
mix test --only external
Что аналогично:
mix test --include external --exclude test
Различие заключается в том, что набор тестов завершится неудачно, если при использовании параметра --only не будет выполнено ни одного теста.
В случае тестирования одного файла можно передать один или несколько конкретных номеров строк, чтобы запустить только эти тесты:
mix test test/some/particular/file_test.exs:12
Что эквивалентно:
mix test --exclude test --include line:12 test/some/particular/file_test.exs
Или:
mix test test/some/particular/file_test.exs:12:24
Что эквивалентно:
mix test --exclude test --include line:12 --include line:24 test/some/particular/file_test.exs
Если заданная строка начинается с describe блока, этот фильтр строки выполняет все тесты в нём. В противном случае он выполняет ближайший тест на или перед заданным номером строки.
Покрытие
Конфигурация :test_coverage принимает следующие параметры:
-
:output— выходная директория для результатов покрытия. По умолчанию"cover" -
:tool— инструмент покрытия -
:summary— конфигурация вывода сводки; может быть булевым значением или списком ключевых слов. При передаче списка ключевых слов можно указать:threshold, которое является булевым или числовым значением, которое включает цвет результатов покрытия в красный или зелёный цвет в зависимости от того, является ли процент ниже или выше указанного порога, соответственно. По умолчанию[threshold: 90] -
:export— имя файла для экспорта результатов вместо вывода результатов на лету. Расширение.coverdataавтоматически добавляется к заданному файлу. Этот параметр автоматически устанавливается с помощью параметра--export-coverageили при использовании разделения процессов. См.mix test.coverageдля компиляции отчёта из нескольких экспортов. -
:ignore_modules— модули, которые нужно пропустить при генерации отчётов и сводок
По умолчанию используется очень простой оболочка над cover OTP, но её можно переопределить следующим образом:
def project() do
[
...
test_coverage: [tool: CoverModule]
...
]
end
CoverModule может быть любым модулем, экспортирующим start/2, принимающим путь компиляции и параметры test_coverage в качестве аргументов. Он должен возвращать либо nil , либо анонимную функцию нулевой арности, которая будет выполнена после завершения набора тестов.
Разбиение процессов операционной системы
В то время как ExUnit поддерживает возможность одновременного выполнения тестов в рамках одного экземпляра Elixir, не всегда возможно выполнить все тесты одновременно. Например, некоторые тесты могут зависеть от общих ресурсов.
По этой причине mix test поддерживает разделение файлов тестов между различными экземплярами Elixir. Это делается путём установки параметра --partitions в целое число, обозначающее количество разделов, и установки переменной окружения MIX_TEST_PARTITION для управления тем, какой раздел тестов обрабатывает конкретный экземпляр. Это также может быть полезно для распределения тестирования по нескольким машинам.
Например, для разделения набора тестов на 4 раздела и их выполнения нужно использовать следующие команды:
MIX_TEST_PARTITION=1 mix test --partitions 4 MIX_TEST_PARTITION=2 mix test --partitions 4 MIX_TEST_PARTITION=3 mix test --partitions 4 MIX_TEST_PARTITION=4 mix test --partitions 4
Файлы тестов сортируются заранее в порядке круговой очереди. Обратите внимание, что сам раздел передаётся в качестве переменной среды, чтобы его можно было использовать в конфигурационных файлах и скриптах тестов. Например, его можно использовать для настройки разных экземпляров базы данных на раздел в config/test.exs.
Если разделение включено и используется --cover , отчёты о покрытии не генерируются, так как они содержат только подмножество данных о покрытии. Вместо этого данные о покрытии экспортируются в файлы, такие как cover/MIX_TEST_PARTITION.coverdata. После того, как у вас есть результаты всех разделов в cover/, вы можете запустить mix test.coverage для получения объединённого отчёта.
Параметр --stale
Параметр командной строки --stale пытается запустить только те файлы тестов, которые ссылаются на модули, изменённые с момента последнего запуска этой задачи с --stale.
При первом запуске этой задачи с --stale, выполняются все тесты, и генерируется манифест. При последующих запусках файл тестов отмечается как «старый» (stale), если какой-либо из ссылаемых на него модулей (и любые модули, на которые ссылаются эти модули, рекурсивно) были изменены с момента последнего запуска с --stale. Файл тестов также отмечается как «старый» (stale), если он был изменён с момента последнего запуска с --stale.
Параметр --stale крайне полезен для итераций в разработке программного обеспечения, позволяя запускать только соответствующие тесты по мере внесения изменений в базу кода.
© 2012 Plataformatec
Licensed under the Apache License, Version 2.0.
https://hexdocs.pm/mix/1.11.2/Mix.Tasks.Test.html