Обнаружение нежелательных функций (fdescribe, describe.only) в качестве задачи Gulp
Как можно использовать нежелательные функции в базе кода в Node, особенно Gulp?
Я проверяю непреднамеренно испорченные спецификации, т.е. ddescribe
/fdescribe
и iit
/fit
для жасмина или .only
и .skip
для Mocha:
// should be reported
fdescribe(function () {
// should not be reported
it(function () {
var fit = ...;
this.fit = ...;
});
// should not be reported
// fit(function () { ... });
// should be reported
xit(function () { ... });
// should be reported
fit(function () { ... });
});
// should be reported
describe.only(function () {
// should not be reported
it(function () { ... });
// should not be reported
// it.only(function () { ... });
// should be reported
it.skip(function () { ... });
// should be reported
it.only(function () { ... });
});
Задача должна выйти с ошибками и именами выходных файлов и номерами строк, в которых используются перечисленные функции.
Отмеченные наверняка не обязательно должны быть обнаружены, а также функции/свойства с тем же именем (скорее всего, fit
), поэтому простое совпадение регулярных выражений здесь не является вариантом (например, для console.*
). Будет оценено некоторое решение на основе AST, которое принимает пользовательские имена функций.
Ответы
Ответ 1
Я бы решил его на этапе статического анализа с помощью ESLint
утилиты javascript linting. Чтобы уловить эксклюзивные/сфокусированные спецификации mocha, случайно оставленные в кодовой базе, существует правило no-exclusive-tests
, реализованное в eslint-plugin-mocha
плагин:
Mocha имеет функцию, позволяющую запускать тесты исключительно с помощью добавление .only
в тестовый пакет или тестовый файл. Эта функция действительно полезно отлаживать неудачный тест, поэтому вам не нужно выполнять все ваши тесты. После того, как вы исправили свой тест и вам необходимо удалить .only
, чтобы убедиться, что все тесты выполнены вашей системы сборки.
Это правило напоминает вам удалить .only
из ваших тестов, подняв когда вы используете эксклюзивную функцию.
Если вы хотите привязать ESLint
к gulp
- используйте плагин gulp-eslint
.
Также неплохо было бы запустить задачу gulp
ESLint
перед фиксацией в hook git. Мы использовали пакет pre-git
для установки и отслеживания крючков git.
Таким образом, сфокусированные или эксклюзивные тесты не попадут в кодовую базу в первую очередь.