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

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

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

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

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

Ответ 1

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

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

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

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

Ответ 2

Просто нашел другой вариант с использованием шаблонов Relative Glob:

В файле .eslintrc:

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

Ответ 3

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

Ответ 4

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

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

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

Протестировано с ESLint v.4.11 и моккой 5.0

Ответ 5

Комбинация ответа 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.