Подтвердить что ты не робот

Обнаружение нежелательных функций (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, которое принимает пользовательские имена функций.

4b9b3361

Ответ 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.

Таким образом, сфокусированные или эксклюзивные тесты не попадут в кодовую базу в первую очередь.