Je reçois cette erreur lorsque j'essaie d'exécuter mes tests avec Jest:
FAIL src/__tests__/jokeGenerator.test.tsx
● Test suite failed to run
TypeError: environment.teardown is not a function
at node_modules/jest-runner/build/run_test.js:230:25
Je suis tombé sur une solution possible ici: Comment résoudre TypeError: environment.teardown n’est pas une fonction?
Mais après avoir fait ce qui était suggéré: supprimer mon fichier yarn.lock, le dossier node_modules, supprimer Jest de mon package.json et réinstaller le tout avec du fil - j'ai rencontré un nouveau problème:
● Test suite failed to run
TypeError [ERR_INVALID_ARG_TYPE]: The "path" argument must be of type string
at assertPath (path.js:39:11)
at Object.relative (path.js:1173:5)
at Object.getCacheKey (node_modules/ts-jest/dist/utils/get-cache-key.js:15:16)
J'ai l'impression que la solution précédente fonctionnait pour les autres parce qu'ils utilisaient create-react-app
et installaient ensuite une version conflictuelle de plaisanterie à côté. Si tel est le cas, la solution ci-dessus ne s'applique pas à mon problème car je n'ai pas utilisé create-react-app
.
J'ai donc réinstallé jest et @ types/jest et j'ai maintenant le même problème initial ...
Ceci est ma config de webpack:
module.exports = {
entry: './src/index.tsx',
devServer: {
contentBase: __dirname + '/dist/',
},
module : {
rules: [
{
test: /\.tsx?$/,
exclude: /node_modules/,
use: {
loader: 'ts-loader'
}
},
{
test: /\.css$/,
exclude: /node_modules/,
use: [
'style-loader',
{
loader: 'typings-for-css-modules-loader?modules?named',
options: {
modules: true,
namedExport: true
}
}
]
}
]
}
}
Ceci est mon package.json:
{
"name": "practice-testing",
"private": true,
"version": "1.0.0",
"description": "",
"scripts": {
"start": "webpack-dev-server --mode development --open --hot",
"build": "webpack --mode production",
"test": "jest"
},
"keywords": [],
"author": "",
"license": "ISC",
"devDependencies": {
"@types/jest": "^23.3.1",
"@types/react": "^16.4.9",
"@types/react-dom": "^16.0.7",
"babel-core": "^6.26.3",
"babel-jest": "^23.4.2",
"css-loader": "^1.0.0",
"css-modules": "^0.3.0",
"jest": "^23.5.0",
"react-testing-library": "^5.0.0",
"style-loader": "^0.22.1",
"ts-jest": "^23.1.3",
"ts-loader": "^4.4.2",
"TypeScript": "^3.0.1",
"typings-for-css-modules-loader": "^1.7.0",
"webpack": "^4.16.5",
"webpack-cli": "^3.1.0",
"webpack-dev-server": "^3.1.5"
},
"dependencies": {
"react": "^16.4.2",
"react-dom": "^16.4.2"
},
"jest": {
"testEnvironment": "node"
}
}
C'est ma plaisanterie config:
module.exports = {
"roots": [
"<rootDir>/src"
],
"transform": {
"^.+\\.tsx?$": "ts-jest"
},
"testRegex": "(/__tests__/.*|(\\.|/)(test|spec))\\.tsx?$",
"moduleFileExtensions": [
"ts",
"tsx",
"js",
"jsx",
"json",
"node"
],
}
Et enfin, voici mon tsconfig:
{
"compilerOptions": {
"module": "commonjs",
"target": "es5",
"jsx": "react",
"noImplicitAny": true,
"removeComments": true,
"preserveConstEnums": true,
"sourceMap": true,
},
"include": [
"./src/**/*",
],
"exclude": [
"node_modules",
]
}
TLDR
Cette erreur signifie souvent qu'il y a un jest-environment-jsdom
et/ou jest-environment-node
installé à la racine de node_modules
qui est incompatible avec la version de Jest
utilisée pour exécuter les tests.
Détails
Celui-ci était intéressant.
Le problème est css-modules
. Il a une dépendance sur [email protected]
(qui aurait dû être sous ses devDependencies).
[email protected]
finit par installer [email protected]
et [email protected]
qui aboutissent à la racine de node_modules
.
jest@^23.5.0
est installé, ce qui installe jest-environment-jsdom@^23.4.0
et jest-environment-node@^23.4.0
à plusieurs endroits dans node_modules/jest
, mais pas au niveau racine de node_modules
car les versions 20.0.3
sont présentes.
Lorsqu'un testEnvironment
est spécifié pour Jest
, le processus de résolution recherche l'environnement. Le premier endroit où il essaie est dans le projet qui dans ce cas résout les versions 20.0.3
.
Ces versions antérieures des environnements de test ne contiennent pas tout ce qui est requis par les versions ultérieures de Jest
, y compris une définition de teardown()
.
Supprimez css-modules
de package.json
, supprimez votre package-lock.json
et/ou yarn.lock
et node_modules
et exécutez npm install
. Cela devrait tout clarifier.
(Notez que css-modules
ne contient que 133 téléchargements hebdomadaires et aucun site github répertorié , je suppose qu'il a été ajouté comme dépendance par erreur, il n'est pas associé à Modules CSS )
Juste au cas où quelqu'un d'autre trébucherait à l'intérieur d'un projet utilisant des espaces de travail en fil, j'ai résolu le même problème en en ne remontant pasjest
à la racine du projet:
"workspaces": {
"packages": [
"packages/*"
],
"nohoist": [
"**/jest/**",
"**/jest"
]
},