升级Angular 6与Karma 1.7.1后ng test忽略--environment标志问题
解决Angular 6升级后测试命令的两个问题
升级到Angular 6后,CLI的架构和命令参数有不少变化,你遇到的这两个问题都是适配变化时的常见坑,下面逐个给你解决:
1. --environment标志不再被识别,始终使用dev环境
Angular 6+的CLI已经废弃了--environment参数,测试环境的切换需要用--configuration(可简写为-c)参数,同时得在angular.json的test构建配置里添加对应的环境配置项。
具体操作:
打开你的angular.json,找到projects -> meteor-app -> architect -> test节点,现在它只有options,需要新增configurations节点来定义不同测试环境的文件替换规则:
"test": { "builder": "@angular-devkit/build-angular:karma", "options": { "main": "src/test.ts", "karmaConfig": "./karma.conf.js", "polyfills": "src/polyfills.ts", "tsConfig": "src/tsconfig.spec.json", "scripts": [], "styles": [ "src/sass/styles.scss", "node_modules/ng2-toasty/style-material.css" ], "assets": [ "src/assets" ] }, "configurations": { "test": { "fileReplacements": [ { "replace": "src/environments/environment.ts", "with": "src/environments/environment.test.ts" } ] }, "production": { "fileReplacements": [ { "replace": "src/environments/environment.ts", "with": "src/environments/environment.prod.ts" } ], "singleRun": true } } }
之后执行测试时,用以下命令指定测试环境:
ng test --configuration=test # 或者更简洁的写法 ng test -c test
2. karma.conf.js中singleRun: false不生效,测试后浏览器立即关闭
Angular CLI的测试构建器会优先读取angular.json里的配置,而非karma.conf.js的设置。你需要在angular.json的test -> options里显式声明"singleRun": false,或者在命令行直接指定监听模式。
两种解决方式:
- 方式一:修改angular.json
在test -> options里添加"singleRun": false:
"test": { "builder": "@angular-devkit/build-angular:karma", "options": { "main": "src/test.ts", "karmaConfig": "./karma.conf.js", "polyfills": "src/polyfills.ts", "tsConfig": "src/tsconfig.spec.json", "scripts": [], "styles": [ "src/sass/styles.scss", "node_modules/ng2-toasty/style-material.css" ], "assets": [ "src/assets" ], "singleRun": false }, // ... 上面新增的configurations节点 }
- 方式二:命令行临时指定
执行测试时加上--watch=true参数:
ng test -c test --watch=true
这样修改后,测试完成后浏览器就会保持打开状态,监听文件变化并自动重新执行测试。
内容的提问来源于stack exchange,提问作者Raul A.
相关产品推荐
相关产品推荐

