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?`

Aberta
#32,891 3 comentários 0 reações 0 responsáveis Ver no GitHub
angular/build:unit-test area: @angular/build gemini-triaged
Linguagem predominante
TypeScript
Estrelas
27k
Forks
11.8k
Merge médio
14h 23min
PRs com merge (30d)
162

Descrição

### 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.

Guia de contribuição

Abrir o guia de contribuição

Direção de pesquisa

Comece reproduzindo a falha com o projeto Angular listado, o alias de caminho de tsconfig.json, o import de src/app/app.ts e o comando ng test, comparando Vitest 4.1.0 com 4.0.8. Rastreie a geração de coverage e o tratamento de source maps quando o chunk compartilhado do app faz referência ao alias. Está concluído quando a coverage do navegador termina sem erros vite:import-analysis enquanto o alias é resolvido.

Escrita pelo modelo de indexação a partir do texto da issue.

Avaliação

Stack de tecnologia
playwright, typescript
Domínio
testing-qa
Tipo de issue
Bug
Dificuldade
4/5
Tempo estimado
3-5 dias
Status de atividade
Pouca atividade
Clareza
Razoavelmente clara
Facilidade para iniciantes
48/100

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.