使用 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.jsontsconfig.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 更改为 jesttsconfig.spec.json

然后我将同一文件下的 targetes5 更改为 es2018 和 bam

【讨论】:

以上是关于使用 Jest 我得到:找不到“茉莉花”的类型定义文件的主要内容,如果未能解决你的问题,请参考以下文章

在业力旁边使用玩笑的冲突类型,Angular 上的茉莉花

Jest+vue:“找不到模块 ....vue”

在 nx 中使用 jest 时找不到模块

使用 Jest 测试 NUXT.js 和 Vue.js 应用程序。获取“在 mapState() 中找不到 [vuex] 模块命名空间”和“[vuex] 未知操作类型”

Jest 找不到 MONGO_URI 的 .env.local

在使用 jest 的 vue 测试中找不到模块“@jest/globals”