Как использовать 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 применять правила на основе некоторого шаблона, основанного на имени каталога, или что-то в этом роде?

527   7  

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

    Ничего не найдено.