我试图使用ESLint linter与Jest测试框架。

Jest测试与一些全局变量(如Jest)一起运行,我需要告诉linter;但棘手的是目录结构,在Jest中,测试与源代码一起嵌入在__tests__文件夹中,因此目录结构看起来像这样:

src
    foo
        foo.js
        __tests__
            fooTest.js
    bar
        bar.js
        __tests__
            barTest.js

通常,我将所有的测试都放在一个目录下,我可以在那里添加一个.eslintrc文件来添加全局变量…但我当然不想在每个__test__目录下都添加一个.eslintrc文件。

目前,我只是将测试全局变量添加到全局的.eslintrc文件中,但由于这意味着我现在可以在非测试代码中引用笑话,这似乎不是“正确”的解决方案。

是否有一种方法让eslint应用基于目录名或类似内容的模式的规则?


当前回答

您还可以在测试文件中设置测试环境,如下所示:

/* eslint-env jest */

describe(() => {
  /* ... */
})

其他回答

一些答案假设你已经安装了eslint-plugin-jest,但是不需要这样做,你可以简单地在你的.eslintrc文件中这样做,添加:

  "globals": {
    "jest": true,
  }

文档显示你现在可以添加:

"env": {
    "jest/globals": true
}

到你的.eslintrc,它将把所有与jest相关的东西添加到你的环境中,消除linter错误/警告。

你可能需要在你的esconfig中包含插件:["jest"],如果eslint-plugin-jest插件仍然不起作用,就添加它。

您还可以在测试文件中设置测试环境,如下所示:

/* eslint-env jest */

describe(() => {
  /* ... */
})

基于模式的配置计划在ESLint 2.0.0版本发布。但是现在,您必须创建两个单独的任务(如评论中所述)。一个用于测试,一个用于其余代码,并运行它们,同时提供不同的.eslintrc文件。

附:在ESLint的下一个版本中会有一个笑话环境,它会注册所有必要的全局变量。

在你的.eslintignore文件中添加以下值:

**/__tests__/

这应该忽略__tests__目录的所有实例及其子目录。