Erwägen Sie die Verwendung der Testumgebung „jsdom“.

Lesezeit: 3 Minuten

Ich habe diesen einfachen Test:

import React from 'react'
import { render } from '@testing-library/react'

import Button from '.'

describe('Button', () => {
  it('renders button without crashing', () => {
    const label="test"

    render(<Button label={label} />)
  })
})

Und ich habe eine jest.config.json mit diesem Inhalt

{
  "setupFilesAfterEnv": [
    "<rootDir>/lib/settings/setupTests.ts"
  ]
}

Und auf meinem setupTests.ts Ich habe

import '@testing-library/jest-dom'

Wenn ich renne npm run test (die einfach laufen jest), ich habe die folgende Fehlermeldung erhalten:

w6dW6

Der folgende Fehler kann durch die Verwendung der falschen Testumgebung verursacht werden, siehe
https://jestjs.io/docs/configuration#testenvironment-string.

Erwägen Sie die Verwendung der Testumgebung „jsdom“.

Was mache ich falsch? Das funktionierte vor einem Upgrade.

Moistbobos Benutzeravatar
Feuchtbobo

In deinem package.jsonoder jest.config.js/jest.config.ts Datei, ändern Sie den Wert der testEnvironment Eigentum zu jsdom.

package.json

"jest":{
    "testEnvironment": "jsdom"
}

jest.config.[js|ts]

module.exports = {
    "testEnvironment": "jsdom"
}

Wichtiger Hinweis für Witze >28

Wenn Sie Jest 28 verwenden, müssen Sie es installieren jest-environment-jsdom getrennt durch entweder:

npm: npm i jest-environment-jsdom --save-dev

Garn: yarn add -D jest-environment-jsdom

Warum?

Standardmäßig verwendet Jest die node Test Umgebung. Dies macht im Wesentlichen alle Tests ungültig, die für eine Browserumgebung gedacht sind.

jsdom ist eine Implementierung einer Browserumgebung, die diese Art von UI-Tests unterstützt.

Für Jest Version 28 und höher: jest-environment-jsdom wurde aus der Standardeinstellung entfernt jest Installation, um die Paketgröße zu reduzieren.

Zusätzliche Lektüre

jest testEnvironment-Dokumentation

Scherz 28 bahnbrechende Änderungen

  • Deine Antwort hat mir geholfen. Danke schön. Allerdings was Sie als bereitstellen jest.config.[js|ts] ist das JSON-Format. Um dieses Snippet zu verwenden, müssen Sie den Dateinamen in ändern jest.config.json.

    – Betty

    8. November 2022 um 20:42 Uhr

  • @Betty hat die js/ts-Version expliziter gemacht

    – Feuchtbobo

    9. November 2022 um 5:31 Uhr

  • Ist @testing-library/jest-dom auch für Scherztests im Browser erforderlich? Oder fügt dieses Paket einfach zusätzliche Behauptungen hinzu? jest-environment-jsdom nicht nativ?

    – Michael Lynch

    15. März um 19:40 Uhr

  • @MichaelLynch Ich glaube, das ist ein optionales Paket, wenn Sie die Testbibliothekssuite verwenden, daher ist es nicht erforderlich, grundlegende Scherztests zu schreiben. Ihre Einschätzung, dass Sie zusätzliche Behauptungen hinzufügen, ist richtig.

    – Feuchtbobo

    16. März um 9:01 Uhr


Dies kann auf Testdateibasis gelöst werden, indem a hinzugefügt wird @jest-environment docblock an den Anfang Ihrer Datei. Zum Beispiel:

/** @jest-environment jsdom */
import React from 'react'
import { render } from '@testing-library/react'

import Button from '.'

describe('Button', () => {
  it('renders button without crashing', () => {
    const label="test"

    render(<Button label={label} />)
  })
})

Wenn Ihr Projekt eine Mischung aus UI- und Nicht-UI-Dateien enthält, ist dies oft besser, als das gesamte Projekt durch Einstellung zu ändern "testEnvironment": "jsdom" innerhalb Ihrer package.json- oder Jest-Konfiguration. Durch das Überspringen der Initialisierung der JSDom-Umgebung für Nicht-UI-Tests kann Jest Ihre Tests schneller ausführen. Tatsächlich ist das der Grund, warum Jest hat die Standardtestumgebung in Jest 27 geändert.

  • /** @jest-environment jsdom */ funktionierte, wenn es oben in der Datei platziert wurde, funktionierte jedoch nicht, wenn es über einer Testmethode platziert wurde. Weißt du, warum?

    – Redochka

    16. März um 10:54

  • @redochka – Es kann nur pro Datei und nicht pro Methode geändert werden. Sehen jestjs.io/docs/configuration#testenvironment-string

    – Josh Kelley

    16. März um 17:35 Uhr

Standardmäßig ist der Wert für testEnvironment Knoten Dadurch werden alle Testfälle in der node.js-Umgebung ausgeführt, aber js-dom bietet eine browserähnliche Umgebung. Anstatt einen jsdom-Wert hinzuzufügen, können Sie sogar einen dateispezifischen Wert wie unten hinzufügen, was funktioniert.

/**
 * @jest-environment jsdom
 */
// the above comment helps
test('use jsdom in this test file', () => {
  const element = document.createElement('div');
  expect(element).not.toBeNull();
});

Wir können sogar testdateispezifische Umgebungen hinzufügen, siehe diesen Link.

https://jestjs.io/docs/configuration#testenvironment-string

Versuche dies.

module.exports = {
testEnvironment: 'jsdom',

}

1452410cookie-checkErwägen Sie die Verwendung der Testumgebung „jsdom“.

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

Privacy policy