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
?
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.
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.
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.
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.
package.json
{ examinez ce problème }. Conservez le "test": "react-scripts test --env=jsdom",
par défaut dans cela. Supprimez simplement jest
de vos dépendances dev. Pour ce faire, exécutez la commande suivante:
npm remove --save-dev jest
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 .
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.
Vous devez rétrograder la version installée jest
à v20.0.4
npm install -D [email protected]
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/ .