it-swarm.com.de

TypeError: environment.setup ist keine Funktion in React Testing

Ich habe versucht, das auf der Jest-Website gezeigte Beispiel zu implementieren: Erste Schritte mit Jest

Bei der Ausführung von npm test wurde der folgende Fehler angezeigt:

FAIL  src/sum.test.js
  ● Test suite failed to run

    TypeError: environment.setup is not a function

      at node_modules/jest-runner/build/run_test.js:112:23

sum.js:

function sum(a, b){
  return a+b;
}
module.exports = sum;

sum.test.js:

const sum = require('./sum');

test('adding sum function', () => {
  expect(sum(234,4)).toBe(238);
})

sum.js und sum.test.js sind eine exakte Kopie des Beispiels in Erste Schritte mit Jest .

package.json:

{
  "name": "jest-demo-test",
  "version": "0.1.0",
  "private": true,
  "dependencies": {
    "react": "^16.2.0",
    "react-dom": "^16.2.0",
    "react-scripts": "1.0.17"
  },
  "scripts": {
    "start": "react-scripts start",
    "build": "react-scripts build",
    "test": "jest",
    "eject": "react-scripts eject"
  },
  "devDependencies": {
    "jest": "^22.0.4"
  }
}

Also, wie kann ich TypeError: environment.setup is not a function Fehler loswerden?

23
arsho

Jest ist in Reakt-Skripten enthalten. Der Fehler ist auf einen Konflikt zurückzuführen, der bei der Installation von Jest in einem Projekt mit Reakt-Skripts aufgetreten ist. Das Handbuch "Erste Schritte mit Jest" erwartet ein "sauberes" Projekt.

Entfernen Sie einfach Jest aus Ihren (dev) Abhängigkeiten und es sollte funktionieren. 

Wenn Sie Jest zum Testen von React-Komponenten verwenden möchten (was Sie wahrscheinlich tun), müssen Sie Ihr Testskript in package.json in react-scripts test --env=jsdom so ändern, wie es war.

19
xor

Basierend auf diesem github-Problem: @ jest-environment-Knoten funktioniert nicht in Version 22 ,

Ich habe den sum.test.js wie folgt aktualisiert: </ Strike>

/**
 * @jest-environment node
 */

const sum = require('./sum');

test('adding sum function', () => {
  expect(sum(234,4)).toBe(238);
})

Jetzt bin ich den TypeError: environment.setup is not a function..__ losgeworden.

Ausgabe:

PASS  src/sum.test.js
  ✓ adding sum function (2ms)

Test Suites: 1 passed, 1 total
Tests:       1 passed, 1 total
Snapshots:   0 total
Time:        0.438s
Ran all test suites.

Aktualisierte

Nachdem ich einige Antworten gelesen hatte, habe ich heute das Szenario neu erstellt.

Schritt 1: Ich habe ein neues Projekt mit create-react-app erstellt.

Der Befehl: create-react-app demo-app

package.json datei:

{
  "name": "demo-app",
  "version": "0.1.0",
  "private": true,
  "dependencies": {
    "react": "^16.3.2",
    "react-dom": "^16.3.2",
    "react-scripts": "1.1.4"
  },
  "scripts": {
    "start": "react-scripts start",
    "build": "react-scripts build",
    "test": "react-scripts test --env=jsdom",
    "eject": "react-scripts eject"
  }
}

Diese Datei zeigt, dass jest nicht in den Abhängigkeiten enthalten ist. 

Schritt 2: Ich habe sum.js- und sum.test.js-Dateien in den src-Ordner aufgenommen, wie im offiziellen Getting Started Guide gezeigt.

sum.js:

function sum(a, b) {
  return a + b;
}
module.exports = sum;

sum.test.js:

const sum = require('./sum');

test('adds 1 + 2 to equal 3', () => {
  expect(sum(1, 2)).toBe(3);
});

Schritt 3: Ich habe den Befehl yarn test ausgeführt, ohne jest in der package.json-Datei ..__ einzugeben. Dieser Testbefehl verwendet react-scripts test --env=jsdom wie in package.json gezeigt.

Ausgabe des Tests:

PASS  src/sum.test.js
PASS  src/App.test.js

Test Suites: 2 passed, 2 total
Tests:       2 passed, 2 total
Snapshots:   0 total
Time:        0.594s, estimated 1s
Ran all test suites related to changed files.

Schritt 4: Ich habe die package.json-Datei aktualisiert, um jest als Testskript zu verwenden:

{
  "name": "demo-app",
  "version": "0.1.0",
  "private": true,
  "dependencies": {
    "react": "^16.3.2",
    "react-dom": "^16.3.2",
    "react-scripts": "1.1.4"
  },
  "scripts": {
    "start": "react-scripts start",
    "build": "react-scripts build",
    "test": "jest",
    "eject": "react-scripts eject"
  }
}

Wieder lief ich yarn test und die Ausgabe ist:

$ jest
 PASS  src/sum.test.js
 FAIL  src/App.test.js
  ● Test suite failed to run

    /<PATH>/demo-app/src/App.test.js: Unexpected token (7:18)
         5 | it('renders without crashing', () => {
         6 |   const div = document.createElement('div');
      >  7 |   ReactDOM.render(<App />, div);
           |                   ^
         8 |   ReactDOM.unmountComponentAtNode(div);
         9 | });
        10 | 

Test Suites: 1 failed, 1 passed, 2 total
Tests:       1 passed, 1 total
Snapshots:   0 total
Time:        0.645s, estimated 1s
Ran all test suites.

Zu lang; Habe nicht gelesen (TL; DR)

  1. Fügen Sie nicht jest mit yarn add --dev jest oder npm install --save-dev jest hinzu, wenn Sie den Befehl create-react-app verwenden. jest ist in node-modules des Projekts enthalten, wenn Sie create-react-app verwenden.

Von Offizielle Jest-Dokumentation :

Setup mit Create React App

Wenn Sie gerade erst mit React beginnen, empfehlen wir die Verwendung von Create Reagieren App. Es ist einsatzbereit und wird mit Jest ausgeliefert! Sie müssen nicht Führen Sie zusätzliche Schritte für das Setup aus und können Sie direkt zum nächsten Sektion.

  1. Ändern Sie nicht das Testskript in der package.json-Datei { schauen Sie sich dieses Problem an }. Behalten Sie den voreingestellten "test": "react-scripts test --env=jsdom", bei. 
12
arsho

Entfernen Sie einfach jest aus Ihren Dev-Abhängigkeiten. Führen Sie dazu den folgenden Befehl aus:

npm remove --save-dev jest
7
thierno

Mein Problem damit lösen:
.
Wenn Sie sowohl package als auch jest in package.json haben, löschen Sie jest daraus.
Dann löschen Sie package-lock.json, yarn.lock und node_modules.
Führen Sie dann npm install aus (oder yarn, wenn Sie es verwenden). ~ Dan Abramov ~ . Ausgaben # 5119 .

4
tjungChaniago

Hinzufügen

"jest": {
    "testEnvironment": "node"
  }

in Ihrer package.json-Datei würde Ihre package.json folgendermaßen aussehen:

{
  "name": "jest-demo-test",
  "version": "0.1.0",
  "private": true,
  "dependencies": {
    "react": "^16.2.0",
    "react-dom": "^16.2.0",
    "react-scripts": "1.0.17"
  },
  "scripts": {
    "start": "react-scripts start",
    "build": "react-scripts build",
    "test": "jest",
    "eject": "react-scripts eject"
  },
  "devDependencies": {
    "jest": "^22.0.4"
  },
   "jest": {
    "testEnvironment": "node"
  }
}

UPDATE

für die Personen, die die App erstellen und dieses Problem haben, gibt es zwei Lösungen.

1- Aktualisieren Sie testcommand (oder fügen Sie einen neuen hinzu) in package.json an jest statt an react-scripts test, da react-scripts test keine Jest-Optionen in package.json als @Xinyang_Li in Kommentaren zulässt.

2 - wenn Sie den Testbefehl in package.json nicht ändern und den Standardtest "create -react-app" verwenden möchten; Entfernen Sie die Jest-Optionen aus packge.json (falls vorhanden)

 "jest": {
    "testEnvironment": "node"
  }

</ strike> dann entfernen Sie node_modulesund führen Sie dann npm install aus, um sie alle erneut zu installieren. Danach sollten Ihre Tests normal ablaufen.

2
Mhmdrz_A

Sie sollten die installierte jest auf v20.0.4npm install -D [email protected] herunterstufen.

1
FDisk

Dies ist ein älteres Problem, aber ich hatte das gleiche Problem. Wir haben ein react-scripts-Paket und verwenden die Jest-Version 20.x.x, die Probleme mit coverageTreshold hat. Ich konnte die neuere react-scripts-Version nicht verwenden. Das einzige, was geholfen hat, war die Verwendung von Garnauflösungen. Weitere Informationen finden Sie hier https://yarnpkg.com/lang/en/docs/selective-version-resolutions/ .

0
Honza Prášil