使用 Jest 我得到:找不到“茉莉花”的类型定义文件
Posted
技术标签:
【中文标题】使用 Jest 我得到:找不到“茉莉花”的类型定义文件【英文标题】:Using Jest I get: Cannot find type definition file for 'jasmine' 【发布时间】:2019-09-12 15:00:06 【问题描述】:我正在使用 Angular 7 和 Jest。当我用--codecoverage
开玩笑时,我所有的测试都通过了,但是构造函数中的许多分支都没有被覆盖
(类似于:Branches on constructor not covered)。
我花了很多时间到处检查如何解决它,看来我必须将jest-preset-angular
升级到版本 7。在我这样做之后,我的所有测试套件都无法运行并显示以下消息:
src/app/whatever.component.spec.ts
● Test suite failed to run
TypeScript diagnostics (customize using `[jest-config].globals.ts-jest.diagnostics` option):
error TS2688: Cannot find type definition file for 'jasmine'.
我一直在环顾四周,并尝试应用我找到的解决方案(例如Cannot find type definition file for 'jasmine'、ERROR in error TS2688: Cannot find type definition file for 'jest'、...),但都没有奏效。
我在这里复制一些我在 package.json 中的依赖项:
"jest": "^24.1.0",
"jest-junit": "^6.3.0",
"jest-preset-angular": "^7.0.1",
"ts-node": "~7.0.1",
"tslint": "~5.9.1",
"typescript": "3.2.4"
我之前的版本是:
"jest-preset-angular": "^6.0.2",
更新:我从 Angular 6 和 Jasmine 开始我的项目,并将其更新为 Angular 7 和 Jest。我不知道这是否是重要信息。
【问题讨论】:
你有什么版本的ts-jest
?我在这里看到一个老问题:github.com/kulshekhar/ts-jest/issues/766
我有"ts-jest": "~23.1.3"
。我看到你评论的问题在 23.10.2 之后得到修复。我不知道我没有更新它:它不在我的 package.json 中......我现在会尝试这样做。谢谢!
现在我有"ts-jest: "^24.0.2"
,但我仍然有同样的问题。还是谢谢你!
任何可以尝试的最小回购?
如果tsconfig.spec.json的类型数组中有“jasmine”?这可能是问题所在。
【参考方案1】:
在 compilerOptions 下的 types 字段中转到 tsconfig.spec.json 并删除 jasmine 并添加 jest
"compilerOptions":
"module": "commonjs",
"outDir": "./out-tsc/spec",
"types": ["jest", "node"]
【讨论】:
【参考方案2】:我终于解决了我的问题。该解决方案基于@Emmy Omega 的回答(这就是我给他赏金的原因)和@Akshay Rana 的评论,但必须做更多的事情。我的tsconfig.spec.json
文件中确实有jasmine
,但是用json
更改它(我已经尝试过)并没有解决问题。为了使它工作,我按照以下步骤操作:
• Update npm(我有一个旧版本,安装软件包时遇到了一些问题)。
• 仍然存在的Remove all Karma related stuff:
npm remove karma karma-chrome-launcher karma-coverage-istanbul-reporter karma-jasmine karma-jasmine-html-reporter
• 我还有 this test.ts
文件,我删除了它(我不知道它来自哪里)。我还将它从 tsconfig.app.json
和 tsconfig.spec.json
中删除。
• 在tsconfig.spec.json
中,我将jasmine
的一次出现更改为jest
(按照建议)。
• 将package.json
更新为"jest-preset-angular": "^7.0.1
• 删除node_modules
文件夹中的所有软件包并使用npm i
重新安装它们。
我不知道这些步骤中的哪一个起到了作用,但它终于奏效了!
【讨论】:
【参考方案3】:尝试在我的 Angular 项目中运行 Jest 时出现以下错误。
TypeScript 诊断(自定义使用
[jest-config].globals.ts-jest.diagnostics
选项):错误 TS2688: 找不到“jquery”的类型定义文件。错误 TS2688:不能 查找“jsdom”的类型定义文件。
对我来说,我必须添加类型定义包。
yarn add @types/jquery @types/jsdom --dev
之后,这些错误停止了。
【讨论】:
【参考方案4】:我遇到了同样的问题,但按照建议,我将 jasmine
更改为 jest
的 tsconfig.spec.json
然后我将同一文件下的 target
从 es5
更改为 es2018
和 bam
【讨论】:
以上是关于使用 Jest 我得到:找不到“茉莉花”的类型定义文件的主要内容,如果未能解决你的问题,请参考以下文章
使用 Jest 测试 NUXT.js 和 Vue.js 应用程序。获取“在 mapState() 中找不到 [vuex] 模块命名空间”和“[vuex] 未知操作类型”