Running @angular/build:unit-test with `--include=` should only compile the included tests

オープン
#34,089 コメント 1 件 リアクション 0 件 担当者 0 名 GitHub で見る

まだ誰も着手していません。

評価

難易度
4/5
見積もり時間
3〜5日
初心者へのやさしさ
68/100
issue の種類
バグ
明瞭さ
おおむね明確
活発さ
活発
技術スタック
angular, typescript

調査の方向性

@angular/build:unit-test executor と angular.json のテスト設定から始め、次に --include の処理方法を libs/ui-components/tsconfig.spec.json の include パターンと比較します。提供されている yarn ng test コマンドを使用し、選択した spec とその依存関係だけがコンパイルされることを確認してください。これにより、無関係なテストのエラーでブロックされなくなり、ビルド時間も短縮されます。

索引モデルが issue の本文から書いたものです。

説明

angular/build:unit-test area: @angular/build gemini-triaged
Command

test

Is this a regression?

No, it has been present since the @angular/build:unit-test builder was created.

Description

When I run:

yarn ng test ui-components --include=libs/ui-components/shortcuts/src/ShortcutEventsPlugin.spec.ts --watch=false

with angular.json config:

    "ui-components": {
      "projectType": "library"
      },
      "root": "libs/ui-components",
      "sourceRoot": "libs/ui-components",
      "prefix": "ui",
      "architect": {
        "build": {
          "builder": "@angular/build:ng-packagr",
          "options": {
            "project": "libs/ui-components/ng-package.json",
            "tsConfig": "libs/ui-components/tsconfig.lib.json"
          }
        },
        "test": {
          "builder": "@angular/build:unit-test",
          "options": {
            "buildTarget": "ui-components:build",
            "include": [
              "**/*.spec.ts"
            ],
            "tsConfig": "libs/ui-components/tsconfig.spec.json",
            "runnerConfig": "libs/ui-components/vitest.config.ts"
          }
        }
      }
    }

the @angular/build:unit-test executor (re)compiles all test files (**/*.spec.ts) in the library and those files' dependencies, even though only the included files are needed for the tests that are being run.

This creates 2 problems, aside from being wasteful:

  • This slows down our test/fix loops by a factor of about 2 relative to just compiling the included files, though obviously the speedup depends on the size of the project and other things
  • Compile errors in other tests prevent a developer from being able to run the tests they're working on

We use single file testing extensively during development, and we also have agent instructions to run tests with --include, so this causes significant problems for us.

Minimal Reproduction

In a larger project using @angular/build:unit-test, pick a single test file to run using --include, and run it:

yarn ng test (my-project) --include=(repo path to spec file) --watch=false

And note that mount of time building before running the test. You can also edit another test file in the project to break compilation, and note that you cannot run the first test file.

Then, edit the tsconfig.json.spec, replacing the wildcard patterns with the path to the file(s) being tested. Eg change:

// libs/ui-components/tsconfig.spec.json 
  "include": [
    "**/*.spec.ts",
    "**/*.d.ts",
    "**/*.*tests.ts"
  ],

to

  "include": [
    "shortcuts/src/ShortcutEventsPlugin.spec.ts",
    // "**/*.spec.ts",
    // "**/*.d.ts",
    // "**/*.*tests.ts"
  ],

And re-run the test command with --include. Notice the reduced time building (Eg I see 12s -> 4s) before the tests are run, and also that compile errors in other tests don't block running a test.

NOTE: The performance impact of this behavioral bug increases with the size of the project, so it's not really feasible to create a minimal repro for that. However if you need a minimal repro repo showing that single file tests can't be run when there is a compile error in another test, I can provide one.

Your Environment
Angular CLI       : 22.0.8
Angular           : 22.0.8
Node.js           : 24.16.0
Package Manager   : yarn 4.18.0
Operating System  : win32 x64

┌────────────────────────────┬───────────────────┬───────────────────┐
│ Package                    │ Installed Version │ Requested Version │
├────────────────────────────┼───────────────────┼───────────────────┤
│ @angular-devkit/core       │ 22.0.8            │ catalog:          │
│ @angular-devkit/schematics │ 22.0.8            │ catalog:          │
│ @angular/animations        │ 22.0.8            │ catalog:          │
│ @angular/build             │ 22.0.8            │ catalog:          │
│ @angular/cdk               │ 22.0.6            │ catalog:          │
│ @angular/cli               │ 22.0.8            │ catalog:          │
│ @angular/common            │ 22.0.8            │ catalog:          │
│ @angular/compiler          │ 22.0.8            │ catalog:          │
│ @angular/compiler-cli      │ 22.0.8            │ catalog:          │
│ @angular/core              │ 22.0.8            │ catalog:          │
│ @angular/forms             │ 22.0.8            │ catalog:          │
│ @angular/language-service  │ 22.0.8            │ catalog:          │
│ @angular/platform-browser  │ 22.0.8            │ catalog:          │
│ @angular/router            │ 22.0.8            │ catalog:          │
│ @schematics/angular        │ 22.0.8            │ catalog:          │
│ ng-packagr                 │ 22.0.2            │ catalog:          │
│ rxjs                       │ 7.8.2             │ catalog:          │
│ typescript                 │ 6.0.3             │ catalog:          │
│ vitest                     │ 4.1.8             │ catalog:          │
└────────────────────────────┴───────────────────┴───────────────────┘
Anything else relevant?

No response

主要言語
TypeScript
スター
27k
フォーク
11.8k
平均マージ
16時間 21分
マージ済み PR(30日)
170

コントリビューションガイド

コントリビューションガイドを開く

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

angular/angular-cli のほかの issue

angular/angular-cli の issue をすべて見る

似ている issue

TypeScript の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。