Jest와 함께 ESLint를 사용하는 방법


252

Jest 테스트 프레임 워크와 함께 ESLint 린터를 사용하려고합니다.

Jest 테스트는 다음과 같은 일부 글로벌에서 실행됩니다 jest. 그러나 까다로운 것은 디렉토리 구조입니다 .Jest에서 테스트는 __tests__폴더에 소스 코드가 포함되어 있으므로 디렉토리 구조는 다음과 같습니다.

src
    foo
        foo.js
        __tests__
            fooTest.js
    bar
        bar.js
        __tests__
            barTest.js

일반적으로 단일 디렉토리에서 모든 테스트를 수행 .eslintrc하고 전역을 추가하기 위해 파일을 추가 할 수는 있지만 .eslintrc모든 단일 __test__디렉토리에 파일을 추가하고 싶지는 않습니다 .

지금은 테스트 전역을 전역 .eslintrc파일에 추가했지만 이제는 jest테스트되지 않은 코드에서 참조 할 수 있으므로 "올바른"솔루션처럼 보이지 않습니다.

디렉토리 이름 또는 그와 유사한 것을 기반으로 패턴을 기반으로 규칙을 적용하는 방법이 있습니까?


1
이것은 실제 답변에 대해 너무 무차별 한 힘이지만 eslint-test, 예를 들어 glob 가있는 파일 을 수동으로 사용하는 별도의 linting 작업이있을 수 있습니다 eslint **/__tests__/*.js -c eslint-test.yml. 즉 나는 많은 위험이 생각하지 않습니다 말했다 jest또는 beforeEach글로벌 생산 코드로 누출이)
닉 톰린에게

답변:


669

문서 는 이제 다음을 추가 할 수 있음을 보여줍니다.

"env": {
    "jest": true
}

당신에게 .eslintrc어느 린터 오류 / 경고를 제거, 환경에 모든 농담 관련된 일을 추가합니다.


27
이 방법을 사용하면 " .test.js"또는 "__tests __ / .js"패턴 과 일치하는 파일 외부에서 "설명"또는 "it"을 사용 하면 린트 오류가 발생하지 않습니다. 이것을 달성 할 수있는 방법이 있습니까?
n1ru4l

7
@ l0rin 당신은 당신의 폴더에 .eslintrc기본값을 확장 하는 파일을 추가 할 수 있습니다 . 당신이 OP (여러 테스트 폴더)와 같은 문제가있는 경우에, 당신은 그 생성 할 수 있습니다 (같은 템플릿과 작은 bash는 스크립트를 ).eslintrc__tests__.eslintrcls **/__tests/ | xargs cp templates/.eslintrc
ULYSSE BN

2
관련 링크 here
devonj

73

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 config의 "override in overrides"제한에 대한 해결 방법입니다 (여기의 다른 답변에서 투표하십시오!).

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


4
감사합니다. 이것이 실제로 대답하기 때문에이 질문에 대한 올바른 해결책입니다. 나를 위해 일했다!
sra

1
대단해! 버전> = 4 내 ESLint를 업데이트하고 추가로 "files""env"에 객체를 "overrides"eslint.rc내가 더 이상 테스트 파일의 외부 linting 통과 농담의 특정 구문에 대해 걱정할 필요가 없습니다.
TheDarkIn1978

1
비표준 폴더 구조 인 경우 우수한 솔루션이며 다른 프레임 워크 (jasmine)에도 작동합니다.
Elliot Nelson

2
나는 받아 들인 대답을 쓴 사람입니다-이 대답은 내 것보다 훨씬 낫습니다! 나는 대답을 썼을 때이 문제를 해결하는 유일한 방법이었습니다.
Dave Cooper

6
ESLint 지금 재 연장 지원
닉 맥 커디

21

다음과 같이 테스트 파일에서 테스트 환경을 설정할 수도 있습니다.

/* eslint-env jest */

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


2

패턴 기반 구성은 ESLint의 2.0.0 릴리스로 예정되어 있습니다. 그러나 지금은 주석에 언급 된대로 두 개의 개별 작업을 만들어야합니다. 하나는 테스트 용이고 나머지 하나는 나머지 .eslintrc 파일을 제공하면서 두 코드를 모두 실행합니다.

PS ESLint의 다음 릴리스에는 jest 환경이 있으며 필요한 모든 전역을 등록합니다.


2

나는 문제를 해결했다 REF를

운영

# For Yarn
yarn add eslint-plugin-jest -D

# For NPM
npm i eslint-plugin-jest -D

그런 다음 .eslintrc파일에 추가 하십시오

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

1

환경 만 추가 __tests__폴더

기본 구성을 확장 하는 .eslintrc.yml파일을 __tests__폴더 에 추가 할 수 있습니다 .

extends: <relative_path to .eslintrc>
env:
    jest: true

하나만 있다면 __tests__ 폴더 경우이 솔루션은 필요한 경우에만 jest 환경을 다루기 때문에 최상입니다.

많은 테스트 폴더 다루기

더 많은 테스트 폴더가있는 경우 (OP 사례) 해당 파일을 추가하는 것이 좋습니다. 그리고 그 폴더가 많으면 간단한 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.


1

일부 답변은 'eslint-plugin-jest'가 설치되어 있다고 가정하지만 그렇게 할 필요없이 .eslintrc파일 에서 간단히 수행 할 수 있습니다.

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

-8

.eslintignore 파일에서 다음 값을 추가하십시오.

**/__tests__/

이것은 __tests__ 디렉토리의 모든 인스턴스와 해당 하위를 무시해야합니다.


4
그것은 내가 원하는 것이 아니며 테스트 파일을 무시하고 싶지 않으며 여전히 보푸라기를 원합니다. 올바르게 보푸라기 위해 필요한 옵션을 지정하는 방법을 알고 싶습니다.
Retsam

2
매우 나쁜 생각은 eslint가 테스트 코드를 포함한 모든 코드를 돕는다는 것입니다.
Daniel Kmak
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.