So verwenden Sie ESLint mit Jest

Lesezeit: 5 Minuten

Ich versuche, den ESLint-Linter mit dem Jest-Testframework zu verwenden.

Scherztests laufen mit einigen Globals wie jest, worüber ich dem Linter erzählen muss; Das Knifflige ist aber die Verzeichnisstruktur, bei Jest werden die Tests mit dem Quellcode eingebettet __tests__ Ordner, sodass die Verzeichnisstruktur in etwa so aussieht:

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

Normalerweise hätte ich alle meine Tests unter einem einzigen Verzeichnis, und ich könnte einfach ein hinzufügen .eslintrc Datei dort, um die Globals hinzuzufügen … aber ich möchte auf keinen Fall eine hinzufügen .eslintrc Datei zu jedem einzelnen __test__ dir.

Fürs Erste habe ich nur die Test-Globals zu global hinzugefügt .eslintrc Datei, aber da könnte ich jetzt referenzieren jest in nicht testendem Code scheint das nicht die “richtige” Lösung zu sein.

Gibt es eine Möglichkeit, eslint dazu zu bringen, Regeln anzuwenden, die auf einem Muster basieren, das auf dem Verzeichnisnamen basiert, oder so ähnlich?

  • Dies ist ein bisschen zu brutal für eine tatsächliche Antwort, aber Sie könnten eine separate Linting-Aufgabe haben, die manuell eine verwendeteslint-test Datei mit einem Glob, zB eslint **/__tests__/*.js -c eslint-test.yml. Davon abgesehen glaube ich nicht, dass eine große Gefahr besteht jest oder beforeEach globales Auslaufen in den Produktionscode 😉

    – Nick Tomlin

    27. Juli 2015 um 19:52 Uhr


Benutzer-Avatar
David Cooper

Die Dokumente zeigen, dass Sie jetzt Folgendes hinzufügen können:

"env": {
    "jest/globals": true
}

Zu deinem .eslintrc Dadurch werden alle scherzbezogenen Dinge zu Ihrer Umgebung hinzugefügt, wodurch die Linter-Fehler / -Warnungen beseitigt werden.

Möglicherweise müssen Sie einbeziehen plugins: ["jest"] zu Ihrer esconfig und fügen Sie die hinzu eslint-plugin-jest Plugin, wenn es immer noch nicht funktioniert.

  • Bei dieser Methode wird die Verwendung von „describe“ oder „it“ außerhalb von Dateien, die mit „.test.js“ oder „__tests__/.js”-Muster führt nicht zu Linting-Fehlern. Gibt es eine Möglichkeit, dies zu erreichen?

    – n1ru4l

    9. Mai 2017 um 17:21 Uhr


  • @l0rin du könntest a hinzufügen .eslintrc Datei, die Sie standardmäßig erweitern .eslintrc in deiner __tests__ Mappe. Wenn Sie dasselbe Problem wie OP haben (mehrere Testordner), können Sie diese generieren .eslintrc mit einer Vorlage und einem winzigen Bash-Skript (etwas wiels **/__tests/ | xargs cp templates/.eslintrc)

    – Ulysse BN

    22. Juli 2017 um 19:11 Uhr

  • verwandter Link hier

    – devonj

    25. Januar 2018 um 9:20 Uhr

  • Ist das noch korrekt? Die Dokumente sagen ausdrücklich "jest/globals": true statt "jest": true.

    – Kevin Ghadyani

    21. September 2020 um 20:57 Uhr

  • @Sawtaytoes guter Ort. Ich habe die Antwort entsprechend aktualisiert 🙂

    – David Cooper

    22. September 2020 um 7:47 Uhr

Benutzer-Avatar
Zachary Ryan Smith

ESLint unterstützt dies ab Version >= 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"
      }
    }
  ],
};

Hier ist eine Problemumgehung (von einer anderen Antwort hier, stimmen Sie es ab!) Für die Einschränkung “Extend in Overrides” von eslint config :

overrides: [
  Object.assign(
    {
      files: [ '**/*.test.js' ],
      env: { jest: true },
      plugins: [ 'jest' ],
    },
    require('eslint-plugin-jest').configs.recommended
  )
]

Aus https://github.com/eslint/eslint/issues/8813#issuecomment-320448724

  • Vielen Dank, das ist genau die richtige Lösung für diese Frage, da sie sie tatsächlich beantwortet. hat bei mir funktioniert!

    – sra

    21. März 2018 um 18:13 Uhr

  • Das ist toll! Mit dem Aktualisieren meines ESLint auf Version >= 4 und dem Hinzufügen von a "files" und "env" widersprechen "overrides" in eslint.rc Ich muss mir keine Gedanken mehr über Jest-spezifische Syntaxübergabe von Linting außerhalb der Testdateien machen.

    – Klobiger Brocken

    14. Juni 2018 um 22:46 Uhr


  • Ausgezeichnete Lösung und funktioniert auch für andere Frameworks (Jasmine), wenn Sie eine nicht standardmäßige Ordnerstruktur haben.

    – Elliot Nelson

    23. Dezember 2018 um 23:09 Uhr

  • Ich bin der Typ, der die akzeptierte Antwort geschrieben hat – diese Antwort ist viel besser als meine! Obwohl ich zu dem Zeitpunkt, als ich meine Antwort schrieb, dies die einzige Möglichkeit war, dieses Problem gut zu lösen.

    – David Cooper

    17. Mai 2019 um 12:58 Uhr

  • ESLint unterstützt jetzt das Erweitern in Überschreibungen

    – Nick McCurdy

    8. November 2019 um 20:52 Uhr

Benutzer-Avatar
HandTriX

Sie können die Testumgebung auch wie folgt in Ihrer Testdatei festlegen:

/* eslint-env jest */

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

Um Zacharys Antwort zu vervollständigen, hier ist eine Problemumgehung für die Einschränkung „In Überschreibungen erweitern“ von eslint config :

overrides: [
  Object.assign(
    {
      files: [ '**/*.test.js' ],
      env: { jest: true },
      plugins: [ 'jest' ],
    },
    require('eslint-plugin-jest').configs.recommended
  )
]

Aus https://github.com/eslint/eslint/issues/8813#issuecomment-320448724

Benutzer-Avatar
Brance Lee

ich habe das Problem gelöst REF

Laufen

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

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

Und fügen Sie dann Ihre hinzu .eslintrc Datei

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

Benutzer-Avatar
Tonix

Ab 2021 denke ich, dass der richtige oder zumindest der funktionierende Weg die Installation ist @types/jest und eslint-plugin-jest:

npm i -D eslint-plugin-jest @types/jest

Und das Hinzufügen des Jest-Plugins in .eslintrc.js mit der von @Loren erwähnten Overrides-Anweisung:

module.exports = {
  ...
  plugins: ["jest"],
  ...
  overrides: [
    {
      files: ["**/*.test.js"],
      env: { "jest/globals": true },
      plugins: ["jest"],
      extends: ["plugin:jest/recommended"],
    },
  ],
  ...
};

Auf diese Weise erhalten Sie sowohl in Ihren Quelldateien als auch in Testdateien Linting-Fehler, aber in Testdateien erhalten Sie keine Linting-Fehler test und andere Funktionen von Jest, aber Sie erhalten sie in Ihren Quelldateien, da sie dort als undefiniert erscheinen.

einige der Antworten davon ausgehen Sie haben eslint-plugin-jest jedoch installiert ohne Wenn Sie das tun müssen, können Sie es einfach tun Dies in deiner .eslintrc Datei, hinzufügen:

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

  • Danke – das hat funktioniert – dieser Kommentar benötigt mehr Stimmen.

    – Plastischer Stör

    19. Mai um 21:49 Uhr

1315710cookie-checkSo verwenden Sie ESLint mit Jest

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy