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

时间:2016-06-01 03:13:43

标签: chai eslint

在我的Chai测试中,我经常发现自己想要使用类似.to.be.empty.to.be.true之类的断言,因为我发现它们比.to.be.length(1)或{更清晰易读{1}}。然而,这打破了我的linter(我正在使用默认的Airbnb linting)。

我可以使用.to.be.equal(true)语法,但是我必须将它添加到每个读取的内容中,这看起来很乏味。

我也读过关于DirtyChai库的内容,但是这需要我回到我的整个测试库中为它们添加括号所有这些似乎是我不应该只是为了让我的为了传递一些东西,它应该可以在第一时间使用。

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

5 个答案:

答案 0 :(得分:33)

您可以使用相关文件顶部的eslint-disable停用整个文件的规则:

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

但是,在每个测试文件的顶部添加它可能很乏味。要为所有相关文件禁用此规则,您可以:

  1. 将新的.eslintc configuration file放在与测试文件相同的目录中,并配置为禁用该规则。这允许您对所有其他规则使用默认配置,而忽略该规则仅专门针对该文件夹中的文件。 ESLint称之为Configuration Cascading

    {
        "rules": {
            "no-unused-expressions": "off"
        }
    }
    
  2. 使用主overrides文件中的.eslintrc键与disable rules for groups of files进行水彩模式匹配:

    {
        "overrides": [
            {
                "files": ["*.test.js", "*.spec.js"],
                "rules": {
                    "no-unused-expressions": "off"
                }
            }
        ]
    }
    
  3. 这也允许您禁用在测试中遇到麻烦的其他规则,例如no-underscore-dangle使用rewire时。

答案 1 :(得分:26)

使用Relative Glob Patterns找到了另一个选项:

.eslintrc文件中:

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

答案 2 :(得分:16)

我制作了一个名为eslint-plugin-chai-friendly的小plugin,它会覆盖默认的no-unused-expressions规则并使其对chai友好。修改后的规则会忽略expectshould语句,同时保留其他所有内容的默认行为。

答案 3 :(得分:0)

如果今天有人磕磕绊绊,我遇到了同样的问题,并在eslint documentation找到了这个解决方案。在eslint配置文件中,您可以指定一个或多个环境,这将为此环境预定义全局变量。对我们来说,它是mocha,您可以在.eslintrc.json中进行如下配置:

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

因此,它会删除所有关于mocha describeitbeforeEach等的误报,而无需完全禁用eslint或完全禁用任何特定规则。

使用ESLint v.4.11和mocha 5.0

进行测试

答案 4 :(得分:0)

我在tslint上遇到了这个问题,并通过将未使用表达式的规则向下移动了一层来解决了这个问题。我的./tslint.json具有我关心的所有其他规则,然后我制作了./src/tslint.json看起来像

{
    "rules": {
        "no-unused-expression": true
    },
    "extends": "../tslint.json"
}

tslint在降级到树中时(使用--project或使用VSCode扩展名)自动在每个级别中检查配置文件,因此这意味着我的测试(在./test/下)具有所有其他规则已应用,但是no-unused-expression仅适用于./src/下的文件。