web-dev-qa-db-fra.com

TypeError: environment.setup n'est pas une fonction dans React Testing

J'essayais de mettre en œuvre l'exemple présenté sur le site Web de Jest: Démarrer avec Jest

En exécutant npm test sur, j'obtenais l'erreur suivante:

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 et sum.test.js sont une copie exacte de l'exemple présenté dans Mise en route avec 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"
  }
}

Alors, comment puis-je me débarrasser de l'erreur TypeError: environment.setup is not a function?

23
arsho

Jest est inclus avec react-scripts. L'erreur est due à un conflit survenu lors de l'installation de Jest dans un projet démarré avec react-scripts. Le guide "Premiers pas avec Jest" prévoit un projet "propre".

Supprimez simplement Jest de vos dépendances (dev) et cela devrait fonctionner. 

Si vous souhaitez utiliser Jest pour tester les composants React (ce que vous faites probablement), vous devez modifier votre script de test dans package.json en react-scripts test --env=jsdom, dans l'état où il se trouvait.

19
xor

Sur la base de ce problème de github: le nœud @ jest-environment ne fonctionne pas dans la v22 ,

J'ai mis à jour le sum.test.js en tant que: </ Strike>

/**
 * @jest-environment node
 */

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

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

Maintenant je me suis débarrassé du TypeError: environment.setup is not a function.

Sortie:

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.

Mis à jour

En lisant plusieurs réponses, j'ai aujourd'hui recréé le scénario.

Étape 1: J'ai créé un nouveau projet en utilisant create-react-app.

La commande: create-react-app demo-app

package.json fichier:

{
  "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"
  }
}

Ce fichier montre que jest n'est pas inclus dans les dépendances. 

Étape 2: J'ai inclus les fichiers sum.js et sum.test.js dans le dossier src, comme indiqué dans le guide officiel pour commencer .

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);
});

Étape 3: J'ai exécuté la commande yarn test sans inclure jest dans le fichier package.json . Cette commande test utilise donc react-scripts test --env=jsdom comme indiqué dans package.json.

Sortie du test:

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.

Étape 4: J'ai mis à jour le fichier package.json afin d'utiliser jest comme script de test:

{
  "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"
  }
}

Encore une fois j'ai couru yarn test et le résultat est:

$ 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.

Trop long; N'a pas lu (TL; DR)

  1. N'ajoutez pas jest en utilisant yarn add --dev jest ou npm install --save-dev jest si vous utilisez la commande create-react-app. jest est inclus dans node-modules du projet si vous utilisez create-react-app.

De documentation officielle de Jest :

Configuration avec l'application Create React

Si vous démarrez tout juste avec React, nous vous recommandons d’utiliser Create React App. Il est prêt à être utilisé et est livré avec Jest! Vous n'avez pas besoin de effectuez toutes les étapes supplémentaires pour la configuration et dirigez-vous directement vers le prochain section.

  1. Ne modifiez pas le script de test dans le fichier package.json { examinez ce problème }. Conservez le "test": "react-scripts test --env=jsdom", par défaut dans cela. 
12
arsho

Supprimez simplement jest de vos dépendances dev. Pour ce faire, exécutez la commande suivante:

npm remove --save-dev jest
7
thierno

Mon problème résout avec ceci:
.
Si vous avez à la fois react-scripts et jest dans votre package.json, supprimez-le.
Puis supprimez package-lock.json, yarn.lock et node_modules.
Ensuite, exécutez npm install (ou yarn si vous l’utilisez). ~ Dan Abramov ~ . numéros # 5119 .

4
tjungChaniago

Ajouter

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

dans votre fichier package.json, votre package.json ressemblerait à ceci:

{
  "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"
  }
}

METTRE &AGRAVE; JOUR

pour les personnes utilisant create app et ayant ce problème, il existe deux solutions.

1- Mettez à jour la commande test (ou ajoutez-en une nouvelle) dans package.json en jest au lieu de react-scripts test, car react-scripts test n'autorisera pas les options de plaisanterie dans package.json comme @Xinyang_Li est indiqué dans les commentaires.

2-si vous ne souhaitez pas modifier la commande test dans package.json et utilisez le test par défaut create-react-app; supprime les options jest de packge.json (le cas échéant)

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

</ strike> puis remove node_modulespuis exécutez npm install pour les réinstaller tous, puis vos tests doivent s'exécuter normalement.

2
Mhmdrz_A

Vous devez rétrograder la version installée jest à v20.0.4npm install -D [email protected]

1
FDisk

C'est un problème plus ancien, mais j'étais confronté au même problème. Nous avons le paquet react-scripts et il utilise la version Jest 20.x.x qui a des problèmes avec coverageTreshold. Je ne pouvais pas utiliser la nouvelle version react-scripts et la seule chose qui m'a aidé était d'utiliser des résolutions de fils, lisez plus ici https://yarnpkg.com/lang/en/docs/selective-version-resolutions/ .

0
Honza Prášil