使用 ng test 为 Angular 16+ 运行单独的 Jest 单元测试

Kev*_*sen 7 intellij-idea jestjs angular

上周我们的项目从 Angular 15 更新到了 Angular 16。我们之前使用 jest-preset-Angular 的 Jest 配置现在使用内置的实验性 Jest 支持。

我们做了两个相关的改变:

  1. 我们已将以下内容添加到我们的angular.json

    "test": {
      "builder": "@angular-devkit/build-angular:jest",
      "options": {
        "tsConfig": "tsconfig.spec.json",
        "polyfills": [
          "zone.js",
          "zone.js/testing"
        ]
      }
    }
    
    Run Code Online (Sandbox Code Playgroud)
  2. "test": "jest --silent""test": "ng test"在我们的 package.json 脚本中更改为。

ng test当我们使用或一次运行所有单元测试时npm test,一切都会按预期进行。

然而,当我们尝试在 IntelliJ 中运行单独的测试时,它会给出不相关的错误。我很确定这是因为它仍然尝试运行单元测试而jest不是@angular-devkit/build-angular:jest.

当我查看 Jest 单元测试的运行配置时,我看到 Jest 包的以下内容:...\node_modules\jest
我怎样才能将其更改为使用的 Jest @angular-devkit/build-angular?或者我还应该更改其他内容,以便使用新的 Angular 16 实验性 Jest 支持在 IntelliJ 中运行单独的 Jest 单元测试?


更新:我在第一条评论中尝试了@Oksana的建议更改:

  • jest更改为我们的jest:run在线"builder": "@angular-devkit/build-angular:jest",angular.json
  • 运行配置修改为使用...\node_modules\@angular\cli而不是...\node_modules\jest

我还使用 IntelliJ 版本 2023.1.2(终极版)。

但不幸的是,当我运行测试(使用修改后的运行配置)时,我现在收到以下错误:

测试框架意外退出错误
:未知参数:颜色、记者、详细

这也是当前运行配置的屏幕截图:

在此输入图像描述

Der*_*uah 0

我通过两个步骤解决了这个问题。

  1. 如果不使用最新版本的 Angular,则安装@angular-builders/jest,您可能需要指定版本,即如果在 Angular 16 上运行npm install @angular-builders/jest@16,否则只需 anpm install @angular-builders/jest就足够了
  2. 更新 angular.json 配置中的 test.builder 以使用@angular-builders/jest:run

我的最终 angular.json 测试配置如下所示:

"test": {
  "builder": "@angular-builders/jest:run",
  "options": {
    "polyfills": [
      "zone.js",
      "zone.js/testing"
    ],
    "tsConfig": "tsconfig.spec.json"
  }
}

Run Code Online (Sandbox Code Playgroud)