从 Jasmine/Karma 迁移到 Jest 是不是可行?
Posted
技术标签:
【中文标题】从 Jasmine/Karma 迁移到 Jest 是不是可行?【英文标题】:Is it feasible to migrate from Jasmine/Karma to Jest?从 Jasmine/Karma 迁移到 Jest 是否可行? 【发布时间】:2019-08-11 14:21:03 【问题描述】:我有一个包含 3300 多个测试的 Angular 7 应用程序。而且它们需要花费太多时间来运行,并且需要花费太多精力来维护。我听说过很多关于 Jest 的好消息,但不确定将所有这些测试从 Jasmine 迁移到 Jest 是否真的可行。
【问题讨论】:
这是一个相当宽泛的问题,但我会说Jest
是基于Jasmine
的,因此肯定会降低工作量,因为它们的行为相似并共享许多相同的语法。
3300+ 是要迁移的大量测试。这将花费你很长时间。在指责测试框架之前,我可能会想看看为什么这些测试缓慢且不稳定,因为在 Jest 中可能会犯所有相同的错误。
同意这个问题是广泛而固执的。在维护方面,Jest 并没有足够的不同(我已经使用了这两种方法,现在又回到了 Karma 上)。 “可行”取决于时间、技能、预算、第一个测试的编写情况,以及所有不允许这里任何人有效回答的噪音。是的,您可以迁移。我已经开始使用 ng-bullet,它对性能有所帮助。运行我的测试最长的部分之一是编译。我创建了许多项目特定的帮助程序,使编写测试变得轻而易举(如果你觉得你经常键入/复制/粘贴)。
【参考方案1】:
您可以通过升级到 jest 来轻松回答这个问题。 Github by the jest-preset-angular team 上有一个很棒的演练。
在您的项目根目录中添加一些文件:
setup.jest.ts
与:
import 'jest-preset-angular/setup-jest';
jest.config.js
与:
// Angular Ivy (9+ only for the next line)
require('jest-preset-angular/ngcc-jest-processor');
// jest.config.js
module.exports =
preset: 'jest-preset-angular',
setupFilesAfterEnv: ['<rootDir>/setup-jest.ts'],
;
tsconfig.spec.json
与:
"extends": "./tsconfig.json",
"compilerOptions":
"outDir": "./out-tsc/spec",
"types": ["jest"]
,
"include": ["src/**/*.spec.ts", "src/**/*.d.ts"]
修改tsconfig.json
:
"lib": [ "es2018", "dom" ],
"esModuleInterop": true
修改tsconfig.spec.json
:
"types": [ "jest" ] // Replace "jasmine"
修改package.json
"test": "jest -c ./jest.config.js ./src
添加所需的包:
npm install jest jest-preset-angular @types/jest @angular-builders/jest
安装后迁移
然后您可以自动 transform 您的测试(在某种程度上)从 Jasmine 到 Jest:
npx jest-codemods
现在您可以针对特定项目回答您的问题
运行:
npm run test
查看您需要手动修复多少失败的测试才能完成迁移。并决定这是否在您的时间范围内。
疑难解答
错误:无法设置基本提供程序,因为它已被调用
查找tests.ts
文件并将其删除。这是 Jest 中不需要的 karma 文件。
【讨论】:
以上是关于从 Jasmine/Karma 迁移到 Jest 是不是可行?的主要内容,如果未能解决你的问题,请参考以下文章
Karma 没有在 Jenkins CI 中运行,找不到模块 'karma-jasmine'
Angular - Jasmine/karma - 订阅 lambda 表达式未执行
在Visual Studio 2013中使用Jasmine + Karma进行AngularJS测试
使用 Angular 和 Jasmine/Karma 的私有方法进行测试和代码覆盖
Karma + Jasmine 下 angular.mock.inject 的 TypeScript AngularJS 控制器测试问题
如何在 (jasmine + karma) 中为以下方法编写测试,该方法在构造函数中注入了 ComponentFactoryResolver 和 ApplicationRef