用chai摆脱no-unused-expressions linter错误的好方法

Ben*_*are 46 chai eslint

在我的测试中柴,我经常发现自己想要使用他们的主张是一样的东西.to.be.empty,.to.be.true等等,因为我觉得他们更清洁,而不是读.to.be.length(1).to.be.equal(true).然而,这打破了我的linter(我正在使用默认的Airbnb linting).

我可以使用// disable-eslint-line语法,但是我必须将它添加到每个读取的内容中,这看起来很乏味.

我也读过关于DirtyChai库的内容,但这需要我回到我的整个测试库中,为它们添加括号,这些似乎是我不应该做的只是为了让我的linter传递它应该可能的东西一开始就好.

有没有人知道比我上面概述的更好的方法来处理这个问题?

Nic*_*ett 48

您可以采取几种解决方案/方法.您可以使用eslint-disable相关文件顶部的整个文件禁用规则:

/* eslint-disable no-unused-expressions */
expect(someTrueValue).to.be.true; 
Run Code Online (Sandbox Code Playgroud)

但是,在每个测试文件的顶部添加它也可能很乏味.另一个选项是为特定文件夹中的所有文件禁用此规则(这也允许您禁用通常禁用但在测试中变得麻烦的其他规则,例如.eslintc使用时Configuration Cascading).

您可以通过将overrides 配置文件放在与测试文件相同的目录中来配置为禁用该规则.这允许您对所有其他规则使用默认配置,而忽略该规则仅专门针对该文件夹中的文件.ESLint称之为.eslintrc.


小智 26

刚刚找到了使用相对全局模式的另一个选项:

在您的.eslintrc文件中:

overrides: [
    {
        files: "*.test.js",
        rules: {
            "no-unused-expressions": "off"
        }
    }
]
Run Code Online (Sandbox Code Playgroud)


小智 17

我做了一个小插件叫做eslint-plugin-chai-friendly覆盖缺省no-unused-expressions规则,使之朝柴友好.修改后的规则会忽略expectshould语句,同时保留其他所有内容的默认行为.

  • +1.这应该是可接受的答案,因为这意味着您不必关闭整个测试文件的规则(因此,在适用时您仍然可以获得规则的好处).谢谢你的插件! (2认同)
  • 如果您正在编写打字稿,现在 npm 上有一个用于 tslint 的等效插件:`tslint-no-unused-expression-chai`。 (2认同)

Sco*_*ger 5

jonalvarez 的回答Ihor Diachenko 的回答结合起来,正是我想要的:

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': 'error',
    },
  }],
  // ...
}
Run Code Online (Sandbox Code Playgroud)

这样,no-unused-expression规则只会在*.test.js文件中被覆盖,no-unused-expression并且仍然会保留一条规则来捕获测试文件中与chai.