angular / angular/angular-cli

Vitest coverage issue `vite:import-analysis` error `Pre-transform error: Failed to resolve import "#/util" from "src/app/app.ts". Does the file exist?`

オープン
#32,891 コメント 3 件 リアクション 0 件 担当者 0 名 GitHub で見る
angular/build:unit-test area: @angular/build gemini-triaged
主要言語
TypeScript
スター
27k
フォーク
11.8k
平均マージ
14時間 23分
マージ済み PR(30日)
162

説明

### Command

test

### Is this a regression?

- [x] Yes, this behavior used to work in the previous version

### The previous version in which this bug was not present was

vitest@4.0.8

### Description

I'm not sure if this issue is an issue with Vitest, or the Angular CLI integration with Vitest. I put the issue here, because I have no idea how to reproduce this issue without Angular at the moment.

The issue is that when using `tsconfig.json` property `paths` and running browser tests with coverage, these `paths` will not used when Vitest tries to read coverage from source maps. The requirement seems to be that a shared chunk exists (`import './app'` in the repro steps).

This results in errors during coverage generation, but tests do not crash. The errors come from Vite's dev server pre transforming original `.ts` files referenced in source-maps.

**Requirements**
- Using `paths` in `tsconfig.json`
- Angular CLI + `eslint` creates a shared chunk that has the `paths` in it's sourcemap
- Vitest with `browsers` + `coverage` + `coverageInclude`
- Vitest `v4.1.0+`

### Minimal Reproduction

1. Init Angular project & install vitest coverage & browser packages
```
npx @angular/cli@21.1.5 new ng21.1.5 -s -t --style css --no-ssr --ai-config none
npm i -E -D vitest@4.1.0 @vitest/browser-playwright@4.1.0 @vitest/coverage-v8@4.1.0 playwright
```
2. Add `src/app/util.ts` file
```ts
export const greet = 'Hello';
```
3. Add a path alias to util file
```json
{
"compilerOptions": {
"paths": {
"#/util": ["./src/app/util.ts"]
}
}
}
```
4. Make `App` (`app.ts`) use value from `util.ts`
```ts
import { greet } from '#/util';
// ...
export class App {
protected readonly title = signal(greet);
}
```
5. Add import to `app.ts` from `app.config.ts`
```ts
import './app';
```
6. Run tests with browser, coverage & coverage include
```
npx ng test --no-watch --browsers chromium --coverage --coverage-include src/app/**/*.ts
```

### Exception or Error

```text
There's logged errors for every file that uses the path alias, which in our project is most of them (e.g. `import { shared } from '#/core';`).

00:02:12 [vite] (client) Pre-transform error: Failed to resolve import "#/util" from "src/app/app.ts". Does the file exist?
Plugin: vite:import-analysis
File: C:/Users/foo/repro/src/app/app.ts:3:22
11 | import { Component, signal } from "@angular/core";
12 | import { RouterOutlet } from "@angular/router";
13 | import { greet } from "#/util";
| ^
14 | export let App = class {
15 | title = signal(greet);
```

### Your Environment

```text
I've tried with `@angular/build` + `@angular/cli` at several versions, including `21.1.x` and `21.2.x`. Downgrading `vitest` to `4.0.8` fixes the issue, but `vitest@4.1.0` and `4.1.2` both failed.

----------------------------------------

Angular CLI : 21.2.5
Angular : 21.2.6
Node.js : 25.8.2 (Unsupported)
Package Manager : npm 11.11.1
Operating System : win32 x64

┌───────────────────────────┬───────────────────┬───────────────────┐
│ Package │ Installed Version │ Requested Version │
├───────────────────────────┼───────────────────┼───────────────────┤
│ @angular/build │ 21.2.5 │ ^21.1.5 │
│ @angular/cli │ 21.2.5 │ ^21.1.5 │
│ @angular/common │ 21.2.6 │ ^21.1.0 │
│ @angular/compiler │ 21.2.6 │ ^21.1.0 │
│ @angular/compiler-cli │ 21.2.6 │ ^21.1.0 │
│ @angular/core │ 21.2.6 │ ^21.1.0 │
│ @angular/forms │ 21.2.6 │ ^21.1.0 │
│ @angular/platform-browser │ 21.2.6 │ ^21.1.0 │
│ @angular/router │ 21.2.6 │ ^21.1.0 │
│ rxjs │ 7.8.2 │ ~7.8.0 │
│ typescript │ 5.9.3 │ ~5.9.2 │
│ vitest │ 4.1.0 │ 4.1.0 │
└───────────────────────────┴───────────────────┴───────────────────┘
```

### Anything else relevant?

Does not seem to be OS specific. The issue is on GitHub Actions on Ubuntu, and locally on Windows.

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

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

調査の方向性

まず、記載された Angular プロジェクト、tsconfig.json のパスエイリアス、src/app/app.ts の import、および ng test コマンドを使って失敗を再現し、Vitest 4.1.0 と 4.0.8 を比較します。共有 app chunk がエイリアスを参照する場合の coverage 生成と source-map の処理を追跡します。エイリアスが解決された状態で、vite:import-analysis エラーなしにブラウザの coverage が完了すれば完了です。

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

評価

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

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

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