You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
When `true`, each file is checked against the top-level thresholds instead of the project-wide aggregate. When set to an object, both are checked: the aggregate against the top-level thresholds, and every file against these per-file minimums.
242
+
243
+
<!-- eslint-skip -->
244
+
```ts
245
+
{
246
+
coverage: {
247
+
thresholds: {
248
+
lines: 80,
249
+
functions: 80,
250
+
branches: 80,
251
+
statements: 80,
252
+
perFile: {
253
+
lines: 50,
254
+
functions: 50,
255
+
branches: 50,
256
+
statements: 50,
257
+
},
258
+
}
259
+
}
260
+
}
261
+
```
262
+
263
+
`{ 100: true }` is also accepted inside the object as a shortcut for setting all four metrics to `100`:
264
+
265
+
<!-- eslint-skip -->
266
+
```ts
267
+
{
268
+
coverage: {
269
+
thresholds: {
270
+
lines: 80,
271
+
perFile: {
272
+
100: true,
273
+
},
274
+
}
275
+
}
276
+
}
277
+
```
278
+
279
+
`perFile` can also be set on an individual [glob-pattern threshold](/config/coverage#coverage-thresholds-glob-pattern). Glob patterns do **not** inherit the top-level `perFile`; set it on each glob explicitly.
280
+
281
+
<!-- eslint-skip -->
282
+
```ts
283
+
{
284
+
coverage: {
285
+
thresholds: {
286
+
perFile: true,
287
+
lines: 80,
288
+
289
+
'src/utils/**': {
290
+
lines: 90,
291
+
perFile: true,
292
+
},
293
+
}
294
+
}
295
+
}
296
+
```
242
297
243
298
### coverage.thresholds.autoUpdate
244
299
@@ -257,9 +312,6 @@ You can also pass a function for formatting the updated threshold values. The fu
Sets thresholds for files matching the glob pattern.
293
345
346
+
Each glob pattern can set its own `perFile` (`boolean | object`), checked exactly like the top-level `perFile` but scoped to the matched files. Glob patterns do not inherit the top-level `perFile` — set it per glob.
347
+
294
348
::: tip NOTE
295
349
Vitest counts all files, including those covered by glob-patterns, into the global coverage thresholds.
296
350
This is different from Jest behavior.
@@ -311,6 +365,8 @@ This is different from Jest behavior.
311
365
functions: 90,
312
366
branches: 85,
313
367
lines: 80,
368
+
// each matching file must individually hit the thresholds above
369
+
perFile: true,
314
370
},
315
371
316
372
// Files matching this pattern will only have lines thresholds set.
Check thresholds per file. See `--coverage.thresholds.lines`, `--coverage.thresholds.functions`, `--coverage.thresholds.branches` and `--coverage.thresholds.statements` for the actual thresholds (default: `false`)
203
+
Check thresholds per file. See `--coverage.thresholds.lines`, `--coverage.thresholds.functions`, `--coverage.thresholds.branches` and `--coverage.thresholds.statements` for the actual thresholds (default: `false`). Object form is available in config files only.
### Glob Coverage Thresholds No Longer Inherit `perFile`
129
+
130
+
`coverage.thresholds.perFile` previously applied to every threshold set, including files matched by glob-pattern thresholds. Glob patterns now control their own per-file checking and no longer inherit the top-level `perFile` — set `perFile` on each glob that needs it.
131
+
132
+
```ts [vitest.config.ts]
133
+
exportdefaultdefineConfig({
134
+
test: {
135
+
coverage: {
136
+
thresholds: {
137
+
'perFile': true,
138
+
139
+
'src/utils/**': {
140
+
lines: 80,
141
+
perFile: true, // [!code ++]
142
+
},
143
+
},
144
+
},
145
+
},
146
+
})
147
+
```
148
+
128
149
### Config Files Are Not Looked Up From Parent Directories
129
150
130
151
Vitest no longer searches parent directories for config files. If you previously relied on running `vitest` from a subdirectory while using a config file from a parent directory, pass the config explicitly and scope test discovery with `--dir`. For example,
'Check thresholds per file. See `--coverage.thresholds.lines`, `--coverage.thresholds.functions`, `--coverage.thresholds.branches` and `--coverage.thresholds.statements` for the actual thresholds (default: `false`)',
218
+
'Check thresholds per file. See `--coverage.thresholds.lines`, `--coverage.thresholds.functions`, `--coverage.thresholds.branches` and `--coverage.thresholds.statements` for the actual thresholds (default: `false`). Object form is available in config files only.',
0 commit comments