当将TypeScript与Jest结合使用时,我的规格将因以下错误消息而失败:
test/unit/some.spec.ts:1:1 - error TS2582: Cannot find name 'describe'. Do you need to install type definitions for a test runner? Try `npm i @types/jest` or `npm i @types/mocha`.
test/unit/some.spec.ts:2:3 - error TS2582: Cannot find name 'it'. Do you need to install type definitions for a test runner? Try `npm i @types/jest` or `npm i @types/mocha`.
test/unit/some.spec.ts:3:7 - error TS2304: Cannot find name 'expect'.
test/unit/some.spec.ts:7:1 - error TS2582: Cannot find name 'test'. Do you need to install type definitions for a test runner? Try `npm i @types/jest` or `npm i @types/mocha`.
Run Code Online (Sandbox Code Playgroud)
类型已经安装。
我用:
"@types/jest": "^23.3.12",
"jest": "^23.6.0",
"ts-jest": "^23.10.5",
"typescript": "^3.1.6"
Run Code Online (Sandbox Code Playgroud)
我使用运行测试 jest --forceExit --coverage --verbose
Gre*_*Woz 53
解决此问题的简单清单(针对 TypeScript 和 Jest)。
@types/jest并@types/node安装。tsconfig.json以便:types: ["jest", "node"]tsconfig.json配置中排除测试或测试目录excluded。如果您转译为 JS,那么您将需要一个单独tsconfig.json的测试,其中包括您的测试文件以及必要的编译器选项和文件以构建适当的上下文。
Dan*_*red 21
您必须在测试文件中导入 jest:
import 'jest';
Run Code Online (Sandbox Code Playgroud)
另一种解决方法是在您的 tsconfig.json 文件中添加:
"compilerOptions": {
"types": [ "node", "jest" ],
"moduleResolution": "node"
}
Run Code Online (Sandbox Code Playgroud)
如果您使用的是 tslint,则问题可能是 tsconfig.json 末尾没有必要的逗号,例如:
{
"compileOnSave": true,
"include": [
"src"
], // remove this comma
}
Run Code Online (Sandbox Code Playgroud)
Jel*_*ier 20
我能够解决这个问题的唯一方法是将tests/文件夹添加到文件中的“包含”中tsconfig.json:
"include": [
"src/**/*.ts",
"tests/*.ts"
]
Run Code Online (Sandbox Code Playgroud)
对于那些也有eslint抱怨的人,您需要添加jest到您的.eslintrc.json文件中:
"env": {
"es2020": true,
"node": true,
"jest": true
}
Run Code Online (Sandbox Code Playgroud)
小智 13
这对我有用:
import '@types/jest';
Run Code Online (Sandbox Code Playgroud)
Mel*_* Sy 10
我使用VSCode作为我的IDE,并且在我的Angular项目中,我不得不注释掉/删除tsconfig.json中的类型,并在tsconfig.spec.json中添加了类笑话。
tsconfig.json
{
"compilerOptions": {
// "types": []
}
}
Run Code Online (Sandbox Code Playgroud)
tsconfig.spec.json
{
"compilerOptions": {
"types": ["jest", "node"]
}
}
Run Code Online (Sandbox Code Playgroud)
小智 10
您需要在 tsconfig.json 中包含您的测试路径。
示例:假设您将路径命名为tests/并将其放在根项目目录中,您需要在 tsconfig 中的“include”参数中指定以查找 testes 文件:
tsconfig.json"include": [
"tests/*.<file_test_extension>",
],
Run Code Online (Sandbox Code Playgroud)
<file_test_extension>:ts | js | 等等。希望有所帮助
小智 8
在我的情况(与代码,创建反应的应用程序内,纱线工作区,开玩笑@ 26,@类型/笑话,"types": ["node", "jest"]目前在tsconfig.json)测试运行正常,但IDE是用红色下划线的所有describe和it。在我尝试了很长时间后重新加载 VS Code 窗口之前,没有任何帮助???
小智 7
以下配置对我有用。我添加node_modules/@types到typeRoots.
{
"compilerOptions": {
// ...rest of my settings
"typeRoots": ["node_modules/@types"],
"types": ["jest", "node"]
}
}
Run Code Online (Sandbox Code Playgroud)
小智 7
另一件可能出错的事情是,如果您在项目上方的父目录中打开了 Visual Studio Code。这发生在我身上,因为我们使用的是Visual\xc2\xa0Studio解决方案,并且我打开了整个解决方案,而不仅仅是项目。
\n简而言之,确保 Visual Studio Code 对项目的根目录开放。
\n至少从 Jest 25 开始,就可以直接导入 Jest 全局变量了。这通常与injectGlobals: false配置选项或--injectGlobals=falseCLI 结合使用。
例如:
import { describe, expect, it, test } from '@jest/globals';
经过tsconfig.json一段时间的摸索之后,我终于想出了,评论该注释"types": [],将起作用。
配置失败(之前)
// tsconfig.json
{
"compilerOptions": {
"types": []
}
}
Run Code Online (Sandbox Code Playgroud)
工作配置
// tsconfig.json
{
"compilerOptions": {
// "types": []
}
}
Run Code Online (Sandbox Code Playgroud)
您可以tsconfig.json在测试文件夹中有一个单独的__tests__:
{
"extends": "../tsconfig.json",
"compilerOptions": {
"baseUrl": "./",
"outDir": "../build",
"noEmit": true,
"rootDir": "../",
},
"exclude": ["node_modules"],
}
Run Code Online (Sandbox Code Playgroud)
它扩展了根文件夹中的那个:
{
"compilerOptions": {
"target": "es6",
"module": "commonjs",
"moduleResolution": "node",
"outDir": "./lib",
"rootDir": "./src",
"strict": true,
"noImplicitAny": true,
"esModuleInterop": true,
},
"exclude": ["node_modules", "**/*.test.ts", "__tests__"]
}
Run Code Online (Sandbox Code Playgroud)
通过这种方式,您的测试文件仍然会被排除在公共构建之外,但仍然可以共享所有常见选项。
我正在运行一个 Lerna 整体存储库,以下是我必须执行的修复操作:
确保位于根包以及目录中单个包的文件package.json"@types/jest"的 devDependencies 中,并且您已运行在目录中安装/链接这些包packages/lerna bootstrapnode_modules
确保该"types": ["node", "jest"]部分位于您的根 tsconfig.json 中。
我添加import 'jest';到了个人 *.test.ts 文件的顶部。
小智 5
您需要在 tsconfig.json 中包含您的测试路径。
我通过在我的项目根目录中有 atsconfig.json和 a解决了这个问题tsconfig.build.json。tsconfig.json包含所有选项,包括
"include": ["src/**/*", "test/**/*"],
Run Code Online (Sandbox Code Playgroud)
tsconfig.build.json:
{
"extends": "./tsconfig.json",
"include": ["src/**/*"]
}
Run Code Online (Sandbox Code Playgroud)
然后在package.json(干净的脚本可选):
"scripts": {
"clean": "rm -rf dist",
"build": "npm run clean && tsc --build tsconfig.prod.json,
...
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14096 次 |
| 最近记录: |