Mat*_*att 5 javascript node.js typescript jestjs
当我尝试使用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
Run Code Online (Sandbox Code Playgroud)
我在这里遇到了一个可能的解决方案:如何解决TypeError:environment.teardown不是一个函数?
但在做了以下建议:删除我的yarn.lock文件,node_modules文件夹,从我的package.json中删除Jest,然后再用纱线重新安装所有内容 - 我遇到了一个新问题:
? 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)
Run Code Online (Sandbox Code Playgroud)
我有一种预感,以前解决方案对其他解决方案起作用的原因是因为他们使用create-react-app然后安装了与之相冲突的版本.如果是这种情况,那么上述解决方案不适用于我的问题,因为我没有使用create-react-app.
所以我重新安装了jest和@ types/jest,现在有了同样的初始问题......
这是我的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
}
}
]
}
]
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的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"
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的开玩笑配置:
module.exports = {
"roots": [
"<rootDir>/src"
],
"transform": {
"^.+\\.tsx?$": "ts-jest"
},
"testRegex": "(/__tests__/.*|(\\.|/)(test|spec))\\.tsx?$",
"moduleFileExtensions": [
"ts",
"tsx",
"js",
"jsx",
"json",
"node"
],
}
Run Code Online (Sandbox Code Playgroud)
最后,这是我的tsconfig:
{
"compilerOptions": {
"module": "commonjs",
"target": "es5",
"jsx": "react",
"noImplicitAny": true,
"removeComments": true,
"preserveConstEnums": true,
"sourceMap": true,
},
"include": [
"./src/**/*",
],
"exclude": [
"node_modules",
]
}
Run Code Online (Sandbox Code Playgroud)
Bri*_*ams 19
TLDR
此错误通常意味着在根目录中存在jest-environment-jsdom和/或jest-environment-node安装node_modules与Jest用于运行测试的版本不兼容.
细节
这个很有意思.
问题是css-modules.它依赖于jest@20.0.4(应该在其devDependencies下).
jest@20.0.4结束了安装jest-environment-jsdom@20.0.3和jest-environment-node@20.0.3其中在根目录的最后node_modules.
jest@^23.5.0安装了哪些安装,jest-environment-jsdom@^23.4.0并安装jest-environment-node@^23.4.0在多个位置node_modules/jest,但不是在根级别,node_modules因为20.0.3版本在那里.
testEnvironment指定a时Jest,解析过程将查找环境. 它尝试的第一个地方是在这个案例中解析20.0.3版本的项目.
那些早期版本的测试环境不包含更高版本所需的所有内容Jest,包括其定义teardown().
删除css-modules从package.json,删除package-lock.json和/或yarn.lock与node_modules和运行npm install,并且应该明确的事情了.
(请注意,css-modules 每周只有133次下载且没有列出的github网站,我猜它是错误地添加为依赖项,它与CSS模块没有关联)
以防万一其他人在使用纱线工作区的项目中偶然发现此问题,我通过不提升 jest到项目根目录解决了同样的问题:
"workspaces": {
"packages": [
"packages/*"
],
"nohoist": [
"**/jest/**",
"**/jest"
]
},
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3585 次 |
| 最近记录: |