Angular5+Ionic3项目Jasmine单元测试报错:TypeError: Cannot read property 'run' of null
解决Angular 5 + Ionic 3测试环境报错:TypeError: Cannot read property 'run' of null
我之前维护Angular 5 + Ionic 3项目时也碰到过一模一样的错误,根源基本和zone.js与测试框架的兼容性、依赖加载问题有关,给你几个亲测有效的解决步骤:
锁定zone.js到兼容版本
Angular 5对zone.js的版本有严格要求,过高或过低的版本都会触发这类奇怪的报错。建议把zone.js锁定到~0.8.26这个稳定版本:
先卸载现有版本:npm uninstall zone.js再安装指定版本:
npm install zone.js@~0.8.26 --save-dev清理依赖缓存并重装
有时候缓存的依赖文件会损坏,导致加载异常。执行以下步骤彻底清理:- 删除
node_modules文件夹和package-lock.json文件(Windows系统换成对应CMD/PowerShell命令):rm -rf node_modules package-lock.json - 重新安装所有依赖:
npm install
- 删除
检查测试配置中的文件加载顺序
打开karma.conf.js,找到files数组,确保zone.js的核心文件在jasmine-patch之前加载,正确的顺序应该是:files: [ 'node_modules/zone.js/dist/zone.js', 'node_modules/zone.js/dist/jasmine-patch.js', // 其他测试相关文件... ]加载顺序颠倒会导致zone.js的patch无法正确初始化,进而抛出
run为null的错误。验证Angular CLI的测试配置
检查项目根目录的angular-cli.json(注意Angular 5用的是这个文件,不是新版的angular.json),在test配置段的scripts数组里,确认包含了正确的zone.js路径,没有重复或者遗漏项。
如果以上步骤都没解决问题,可以尝试把karma升级到~1.7.1,jasmine-core升级到~2.8.0,这两个版本和Angular 5的兼容性非常好。
内容的提问来源于stack exchange,提问作者Yuvraj Patil
相关产品推荐
相关产品推荐

