Ответ 1
Документы показывают, что теперь вы можете добавить:
"env": {
"jest": true
}
К вашему .eslintrc
, который добавит все связанные с шутками вещи в вашу среду, устраняя ошибки/предупреждения линтера.
Надеюсь, это поможет!
Я пытаюсь использовать линкер ESLint с фреймворком тестирования Jest.
Тесты Jest выполняются с некоторыми глобальными переменными типа jest
, о которых мне нужно будет рассказать об этом; но сложной задачей является структура каталогов, а Jest тесты встроены в исходный код в папках __tests__
, поэтому структура каталогов выглядит примерно так:
src
foo
foo.js
__tests__
fooTest.js
bar
bar.js
__tests__
barTest.js
Как правило, у меня были бы все мои тесты в одном каталоге, и я мог бы добавить там файл .eslintrc
, чтобы добавить глобальные переменные... но я, конечно, не хочу добавлять файл .eslintrc
в каждый __test__
.
В настоящее время я только добавил тестовые глобалы в глобальный файл .eslintrc
, но поскольку это означает, что теперь я могу ссылаться на jest
в не-тестирующем коде, что не похоже на "правильное" решение,
Есть ли способ заставить eslint применять правила на основе некоторого шаблона на основе имени каталога или что-то в этом роде?
Документы показывают, что теперь вы можете добавить:
"env": {
"jest": true
}
К вашему .eslintrc
, который добавит все связанные с шутками вещи в вашу среду, устраняя ошибки/предупреждения линтера.
Надеюсь, это поможет!
ESLint поддерживает это начиная с версии> = 4:
/*
.eslintrc.js
*/
const ERROR = 2;
const WARN = 1;
module.exports = {
extends: "eslint:recommended",
env: {
es6: true
},
overrides: [
{
files: [
"**/*.test.js"
],
env: {
jest: true // now **/*.test.js files' env has both es6 *and* jest
},
// Can't extend in overrides: https://github.com/eslint/eslint/issues/8813
// "extends": ["plugin:jest/recommended"]
plugins: ["jest"],
rules: {
"jest/no-disabled-tests": "warn",
"jest/no-focused-tests": "error",
"jest/no-identical-title": "error",
"jest/prefer-to-have-length": "warn",
"jest/valid-expect": "error"
}
}
],
};
Вот обходной путь (из другого ответа здесь, проголосуйте за него!) для ограничения "расширение в переопределениях" конфигурации 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
Вы также можете установить тестовую среду в своем тестовом файле следующим образом:
/* eslint-env jest */
describe(() => {
/* ... */
})
Чтобы завершить ответ захари, вот обходной путь для ограничения "расширение в переопределениях" в конфигурации 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
Конфигурации на основе шаблонов запланированы для версии 2.0.0 ESLint. Пока же вам придется создать две отдельные задачи (как указано в комментариях). Один для тестов и один для остальной части кода и запускать оба из них при предоставлении разных файлов .eslintrc.
P.S. В следующей версии ESLint есть среда шутки, она зарегистрирует все необходимые глобальные переменные.
__tests__
Вы можете добавить файл .eslintrc.yml
в свои папки __tests__
, который расширяет базовую конфигурацию:
extends: <relative_path to .eslintrc>
env:
jest: true
Если у вас есть только одна папка __tests__
, это решение лучше всего, так как оно работает в среде jest только там, где это необходимо.
Если у вас больше тестовых папок (случай OPs), я бы предложил добавить эти файлы. И если у вас есть тонны этих папок, вы можете добавить их с помощью простого zsh script:
#!/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
Этот script будет искать папки __tests__
и добавить файл .eslintrc.yml
в конфигурацию, показанную выше. Этот script должен быть запущен в папке, содержащей родителя .eslintrc
.
в некоторых ответах предполагается, что у вас установлен "eslint-plugin-jest", однако, не делая этого, вы можете просто сделать это в своем файле .eslintrc
, добавив:
"globals": {
"jest": true,
}
Я решил проблему REF
добавьте пряжу eslint-plugin-jest
и настройте
.eslintrc
файл
{
"extends": ["airbnb","plugin:jest/recommended"],
}
В вашем файле .eslintignore добавьте следующее значение:
**/__tests__/
Это должно игнорировать все экземпляры каталога __tests__ и их детей.