Подтвердить что ты не робот

Как использовать ESLint с Jest

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

4b9b3361

Ответ 1

Документы показывают, что теперь вы можете добавить:

"env": {
    "jest": true
}

К вашему .eslintrc, который добавит все связанные с шутками вещи в вашу среду, устраняя ошибки/предупреждения линтера.

Надеюсь, это поможет!

Ответ 2

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

Ответ 3

Вы также можете установить тестовую среду в своем тестовом файле следующим образом:

/* eslint-env jest */

describe(() => {
  /* ... */
})

Ответ 4

Чтобы завершить ответ захари, вот обходной путь для ограничения "расширение в переопределениях" в конфигурации 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

Ответ 5

Конфигурации на основе шаблонов запланированы для версии 2.0.0 ESLint. Пока же вам придется создать две отдельные задачи (как указано в комментариях). Один для тестов и один для остальной части кода и запускать оба из них при предоставлении разных файлов .eslintrc.

P.S. В следующей версии ESLint есть среда шутки, она зарегистрирует все необходимые глобальные переменные.

Ответ 6

Добавить среду только для папки __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.

Ответ 7

в некоторых ответах предполагается, что у вас установлен "eslint-plugin-jest", однако, не делая этого, вы можете просто сделать это в своем файле .eslintrc, добавив:

  "globals": {
    "jest": true,
  }

Ответ 8

Я решил проблему REF

добавьте пряжу eslint-plugin-jest и настройте .eslintrc файл

{
    "extends": ["airbnb","plugin:jest/recommended"],
}

Ответ 9

В вашем файле .eslintignore добавьте следующее значение:

**/__tests__/

Это должно игнорировать все экземпляры каталога __tests__ и их детей.