我试图使用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应用基于目录名或类似内容的模式的规则?
仅为__tests__文件夹添加环境
你可以在__tests__文件夹中添加一个.eslintrc.yml文件,扩展你的基本配置:
extends: <relative_path to .eslintrc>
env:
jest: true
如果你只有一个__tests__文件夹,这个解决方案是最好的,因为它只在需要的地方覆盖环境。
处理许多测试文件夹
如果你有更多的测试文件夹(OPs情况下),我仍然建议添加这些文件。如果你有很多这样的文件夹,可以用一个简单的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文件添加到上面所示的配置中。这个脚本必须在包含父目录.eslintrc的文件夹中启动。
为了完成Zachary的回答,这里有一个解决eslint配置的“扩展覆盖”限制的方法:
overrides: [
Object.assign(
{
files: [ '**/*.test.js' ],
env: { jest: true },
plugins: [ 'jest' ],
},
require('eslint-plugin-jest').configs.recommended
)
]
从https://github.com/eslint/eslint/issues/8813 # issuecomment - 320448724