You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

升级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.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:01:13