Как использовать ESLint с шуткой
Я пытаюсь использовать ESLint linter с платформой тестирования Jest.
тесты Jest выполняются с некоторыми глобалами, такими как jest, о котором мне нужно будет рассказать линтеру; но хитрая вещь-это структура каталогов, с шуткой тесты встроены с исходным кодом в __tests__ папки, чтобы структура каталогов выглядит примерно так:
src
foo
foo.js
__tests__
fooTest.js
bar
bar.js
__tests__
barTest.js
обычно у меня были бы все мои тесты под одним dir, и я мог бы просто добавить .eslintrc файл там добавить глобалы... но я, конечно, не хочу добавлять .eslintrc файл для каждого __test__ реж.
на данный момент я только что добавил тестовые глобалы в глобальный .eslintrc файл, но так как это означает, что теперь я могу ссылаться jest в коде без тестирования это не кажется "правильным" решением.
есть ли способ заставить eslint применять правила на основе некоторого шаблона, основанного на имени каталога, или что-то в этом роде?
7 ответов:
документы показать, что теперь вы можете добавить:
"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" } } ], };
конфигурации на основе шаблонов запланированы для выпуска 2.0.0 ESLint. На данный момент, однако, вам придется создать две отдельные задачи (как указано в комментариях). Один для тестов и один для остальной части кода и запустить оба из них, обеспечивая при этом разные .файлы eslintrc.
P. S. есть шутка среде предстоящем в следующем выпуске ESLint, он будет регистрировать все необходимые глобалс.
добавить среду только для
__tests__папкувы можете добавить в своем
__tests__папки, которые расширяют вашу базовую конфигурацию:extends: <relative_path to .eslintrc> env: jest: trueесли у вас есть только один
__tests__папка, это решение является лучшим, так как оно охватывает среду jest только там, где это необходимо.работа со многими тестовыми папками
если у вас есть больше тестовых папок (Ops case), я бы все равно предложил добавить эти файлы. И если у вас есть тонны этих папки можно добавить их с помощью простого скрипта 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.
чтобы завершить ответ Закари, вот обходной путь для ограничения "extend in overrides" конфигурации 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
вы также можете установить тест env в тестовом файле следующим образом:
/* eslint-env jest */ describe(() => { ... })
в свой .файл eslintignore добавить следующее значение:
**/__tests__/это должно игнорировать все экземпляры каталога__ tests _ _ и их дочерние элементы.
Comments