如何用Jest使用ESLint

我试图用Jesttesting框架来使用ESLint linter。

Jesttesting运行着一些像jest这样的全局variables,我需要告诉它的内容。 但棘手的是目录结构,Jest的testing是embedded在__tests__文件夹中的源代码,所以目录结构看起来像这样:

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

通常情况下,我将所有的testing都放在一个目录下,我可以在其中添加一个.eslintrc文件来添加全局variables…但是我当然不希望将.eslintrc文件添加到每个__test__目录中。

现在,我刚刚把testing全局variables添加到全局的.eslintrc文件中,但是因为这意味着我现在可以在非testing代码中引用jest ,这似乎不是“正确的”解决scheme。

有没有办法让eslint基于某些模式来应用基于目录名称或类似的规则?

您现在可以添加:

 "env": { "jest": true } 

到您的.eslintrc将添加所有与玩笑有关的东西到你的环境中,消除了linter错误/警告。

希望有所帮助!

计划基于模式的configuration2.0.0版本的ESLint。 但是,现在,您将不得不创build两个单独的任务(如注释中所述)。 一个用于testing,另一个用于其他代码并运行它们,同时提供不同的.eslintrc文件。

PS在下一个ESLint版本中会有一个笑话环境,它将注册所有必需的全局variables。

仅为__tests__文件夹添加环境

您可以在您的__tests__文件夹中添加一个.eslintrc.yml文件,这扩展了您的基本configuration:

 extends: <relative_path to .eslintrc> env: jest: true 

如果你只有一个__tests__文件夹,这个解决scheme是最好的,因为它只在需要的地方开玩笑的环境。

处理很多testing文件夹

如果你有更多的testing文件夹(OP的情况下),我仍然build议添加这些文件。 如果你有很多这些文件夹可以添加一个简单的zsh脚本:

 #!/usr/bin/env zsh for folder in **/__tests__/ ;do count=$(($(tr -cd '/' <<< $folder | wc -c))) echo $folder : $count cat <<EOF > $folder.eslintrc.yml extends: $(printf '../%.0s' {1..$count}).eslintrc env: jest: true EOF done 

这个脚本将查找__tests__文件夹,并添加一个.eslintrc.yml文件,configuration如上所示。 该脚本必须在包含您的父级.eslintrc的文件夹中.eslintrc

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

 **/__tests__/ 

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