Хороший способ избавиться от ошибки linter без неиспользуемых выражений с chai

в моих тестах Chai я часто обнаруживаю, что хочу использовать их утверждения, которые являются чем-то вроде .to.be.empty, .to.be.true e.т. c., потому что я нахожу их более чистыми для чтения, чем .to.be.length(1) или .to.be.equal(true). Однако, это разбивает мое Линтер (я с помощью Airbnb по умолчанию пылеобразования).

я мог бы использовать // disable-eslint-line синтаксис, но тогда мне пришлось бы добавить его к каждой строке, которая читается так, и это кажется утомительным.

Я также читал о DirtyChai библиотеки, но это потребует от меня вернуться через всю мою тестовую библиотеку, добавив к ним скобки, что кажется чем-то, что мне не нужно делать, просто чтобы заставить мой Линтер передать что-то, с чем он, вероятно, должен быть в порядке в первую очередь.

кто-нибудь знает лучший способ справиться с этим, чем способы, которые я изложил выше?

5 ответов


есть несколько решений/подходов. Вы можете просто отключить правило для всего файла, используя eslint-disable в верхней части файла, о котором идет речь:

/* eslint-disable no-unused-expressions */
expect(someTrueValue).to.be.true; 

однако добавление этого в верхней части каждого тестового файла также может быть утомительным. Другой вариант-отключить это правило для всех файлов в определенной папке (это также позволяет отключить другие правила, которые обычно отключены, но становятся хлопотными при тестировании, например no-underscore-dangle при использовании rewire).

вы можете сделать это, поставив .eslintc конфигурационный файл в том же каталоге, что и ваши тестовые файлы, настроенные для отключения этого правила. Это позволяет использовать конфигурацию по умолчанию для всех других правил, игнорируя это правило только для файлов в этой папке. ESLint называет это Configuration Cascading.


просто нашел другой вариант, используя Относительная Glob-Шаблоны:

в своем :

overrides: [
    {
        files: "*.test.js",
        rules: {
            "no-unused-expressions": "off"
        }
    }
]

Я сделал маленький плагин под названием eslint-plugin-chai-friendly, который переопределяет значение по умолчанию no-unused-expressions правило и делает его дружественным к чай. Измененное правило игнорирует expect и should операторы, сохраняя при этом поведение по умолчанию для всего остального.


в случае, если кто-то натыкается на это сегодня, у меня была та же проблема и нашел это решение на документация eslint. В файле конфигурации eslint можно указать одну или несколько сред, которые будут предопределять глобальные переменные для этой среды. Для нас, это было бы mocha, и вы настроите это в своем .eslintrc.json:

{
    "env": {
        "mocha": true
    },
    ...
    ...
    ...
}

в результате он удалит все ложноположительные о мокко describe, it, beforeEach, etc. без необходимости полностью отключить eslint или полностью отключить любое конкретное правило.

протестировано с ESLint В. 4.11 и мокко 5.0


объединение ответ jonalvarezz С ответ Игоря Дьяченко дал мне именно то, что хотела:

npm install --save-dev eslint-plugin-chai-friendly

// .eslintrc.js
module.exports = {
  // ...
  plugins: ['chai-friendly'],
  overrides: [{
    files: '*.test.js',
    rules: {
      'no-unused-expressions': 'off',
      'chai-friendly/no-unused-expressions': 'off',
    },
  }],
  // ...
}

таким образом,no-unused-expression правило будет переопределено только в *.test.js файлы И а no-unused-expression правило по-прежнему будет на месте, чтобы поймать любые неиспользуемые выражения в тестовых файлах, которые не связаны с chai.