JestでESLintを使用する方法


254

JestテストフレームワークでESLintリンターを使用しようとしています。

Jestテストはのようないくつかのグローバルで実行されjestます。ただし__tests__、注意が必要なのはディレクトリ構造です。Jestでは、テストはフォルダー内のソースコードに埋め込まれているため、ディレクトリ構造は次のようになります。

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

通常、私はすべてのテストを単一のディレクトリの下に置いて、.eslintrcそこにファイルを追加してグローバルを追加することができます...しかし.eslintrc、すべての単一の__test__ディレクトリにファイルを追加したくありません。

今のところ、テストグローバルをグローバル.eslintrcファイルに追加しただけですが、それによりjest、非テストコードで参照できるようになったため、「正しい」ソリューションとは思えません。

eslintにディレクトリ名などのパターンに基づくルールを適用させる方法はありますか?


1
これは実際の答えには少々強引eslint-testですが、グロブを含むファイルを手動で使用する別のリンティングタスクを使用することもできますeslint **/__tests__/*.js -c eslint-test.yml。とは言っても、a jestまたはbeforeEachグローバルが本番コードに漏洩する危険性はそれほどないと思います;)
Nick Tomlin

回答:


672

ドキュメントはあなたが今追加できることを示しています:

"env": {
    "jest": true
}

あなた.eslintrcにあなたの環境にすべての冗談関連のものを追加し、リンターエラー/警告を排除します。


27
この方法では、「. test.js」または「__tests __ / .js」パターンに一致するファイルの外側で「記述」または「それ」を使用しても、lintingエラーは発生しません。これを達成する方法はありますか?
n1ru4l 2017年

7
@ l0rinあなたはあなたのフォルダに.eslintrcあなたのデフォルトを拡張するファイルを追加することができます。OP(複数のテストフォルダー)と同じ問題がある場合は、テンプレートと小さなbashスクリプト(のようなもの)を使用して生成できます.eslintrc__tests__.eslintrcls **/__tests/ | xargs cp templates/.eslintrc
Ulysse BN

2
関連リンクはこちら
devonj 2018年

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の「オーバーライドの拡張」制限の回避策(ここでの別の回答から、投票してください!)です。

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
これは素晴らしい!ESLintをバージョン> = 4に更新し、"files""env"オブジェクトを"overrides"に追加するとeslint.rc、テストファイルの外部でリントが渡されるJest固有の構文について心配する必要がなくなります。
TheDarkIn1978

1
優れたソリューションであり、非標準のフォルダー構造がある場合、他のフレームワーク(ジャスミン)でも機能します。
Elliot Nelson

2
私は受け入れられた答えを書いた人です-この答えは私の答えよりもはるかに優れています!当時、私は答えを書きましたが、それがこの問題をうまく解決する唯一の方法でした。
Dave Cooper、

6
ESLintはオーバーライドの拡張をサポートするようになりました
Nick McCurdy

21

次のように、テストファイルにテスト環境を設定することもできます。

/* eslint-env jest */

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


2

ESLintの2.0.0リリースでは、パターンベースの構成が予定されています。ただし、現時点では、2つの個別のタスクを作成する必要があります(コメントで述べたとおり)。1つはテスト用で、もう1つは残りのコード用で、両方を実行しながら、異なる.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__フォルダが1つしかない場合は、jest環境を必要な場所に限定するため、このソリューションが最適です。

多くのテストフォルダを扱う

さらにテストフォルダーがある場合(OPsの場合)、それらのファイルを追加することをお勧めします。そして、これらのフォルダーがたくさんある場合は、単純な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 2015

2
非常に悪い考えですが、eslintはすべてのコード(テストコードを含む)で役立ちます。
Daniel Kmak
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.