Статьи

Test-Creep: выборочное выполнение теста для Node.js

 Проверьте test-creep, чтобы выполнить ваши тесты в 10 раз быстрее.

Они говорят нам писать тесты до, во время и после разработки. Но они не говорят нам, что делать с этим постоянно действующим и постоянно растущим списком тестов. Если ваши тесты занимают двузначное число секунд, то вы делаете это неправильно. Возможно, вы уже разбили свои тесты на быстрые модульные тесты, которые вы выполняете все время, и медленные интеграционные тесты, которые вы запускаете по мере необходимости. Разве не было бы здорово выбрать те 2-3 интеграционных теста, которые имеют отношение к только что внесенным изменениям, и запустить их? Разве не было бы здорово заставить модульные тесты запускаться еще быстрее, выполняя только те немногие, которые затронуты вашей текущей работой? Тест-Creepавтоматически запускает только подмножество тестов, на которые влияет ваша текущая работа. Лучшая часть: это сделано с помощью интеграции Mocha, поэтому вы работаете как обычно.

Что такое выборочное выполнение теста?
Выборочное выполнение теста означает запуск только соответствующего поднабора ваших тестов, а не всех. Например, если у вас есть 200 тестов, и 10 из них связаны с какой-либо функцией, то, если вы внесете изменение в эту функцию, вы должны запустить только 10 тестов, а не все 200. test-creep автоматически выбирает соответствующие тесты на основе на Стамбул отчетов покрытия кода. Все это делается для вас за кулисами, и вы можете нормально работать только с Мокко.

Установка и использование
1. Вы должны использоватьМокко в вашем проекте для запуска тестов. Вы должны использовать git в качестве источника контроля.
2. Вам необходимо установить Mocha локально и запускать его локально, а не глобально:

$> npm install mocha
$> ./node_moduels/mocha/bin/mocha ./tests

3. Вам необходимо установить test-creep:

$> npm install test-creep

4. Когда вы запускаете mocha, укажите для запуска специального теста ‘first.js’ перед всеми другими тестами:

$> ./node_modules/mocha/bin/mocha ./node_modules/test-creep/first.js ./tests

first.js в комплекте с мокко тест-крип и патчи обезьяны с необходимым инструментарием (через
Стамбул ).

Кроме того, рекомендуется добавить .testdeps_.json в .gitignore (подробнее об этом файле ниже).

Как это работает?

При первом выполнении команды все тесты запускаются. first.js обезьяна исправляет мокко с охватом кода Стамбул и отслеживает покрытие по тесту (а не по всему процессу). На основании этой информации
test-creep создает тестовый файл зависимостей в корне вашего проекта (.testdeps_.json). Файл указывает для каждого теста, какие файлы он использует:

   {
        "should alert when dividing by zero": [
            "tests/calc.js",
            "lib/calc.js",
            "lib/exceptions.js",

        ],

        "should multiply with negative numbers": [
            "tests/negative.js",
            "lib/calc.js",            
        ],
    }

В следующий раз, когда вы запустите тесты (при условии, что вы добавили first.js в команду)
test-creep запустит ‘git status’, чтобы увидеть, какие файлы были добавлены / удалены / изменены с момента последнего коммита. Затем test-creep ищет файл зависимостей, чтобы увидеть, на какой тест можно повлиять, и дает команду mocha запускать только эти тесты. В приведенном выше примере, если у вас есть незафиксированные изменения только в lib / exceptions.js, будет выполнен только первый тест.

В любой момент вы можете запустить mocha без параметра ‘first.js’, в этом случае будут выполняться все тесты, а не только соответствующие.

Когда использовать тест-крип?

тест-ползучестиСамое приятное в длительных тестовых наборах, где он может сэкономить много секунд или минут при каждом запуске тестов. Если у вас есть набор тестов, который работает очень быстро (<2 секунды), то test-creep, вероятно, добавит больше накладных расходов, чем справки. Однако всякий раз, когда тесты выполняются дольше, чем тест-крип может сэкономить ваше время.