Files
overleaf-cep/services/web/vitest.config.js
Andrew Rumble b2d4687c52 [web] Experiment with code coverage (#28029)
* Update test script to allow coverage to be recorded

* Collect coverage in CI

* [web] integrate coverage report with Jenkins

* [web] add coverage report for acceptance tests

* Use --all flag in vitest coverage

* Use --all flag in acceptance tests

* Switch vitest to use istanbul

* Bump versions of vitest plugins and update package-lock.json

* [web] use a dedicated parameter for coverage in unit/acceptance tests

* [web] temporarily generate HTML report and archive artifacts

* [web] do not run acceptance tests as root in CI

* [web] increase hook timeout in vitest when collecting coverage

* [web] exclude packageMapping from coverage report

* [web] use relative paths in clover reports

* [web] reduce concurrency for unit tests in CI

* [web] keep source code forever on builds

* Revert "[web] temporarily generate HTML report and archive artifacts"

This reverts commit 4c9db571

* [web] archive all the raw coverage report files

* [monorepo] update build scripts for web

* [monorepo] update package-lock.json after merge

* [web] remove spurious change

* [web] merge Jenkins parameter sections

* [web] increase hookTimeout when collecting coverage report

---------

Co-authored-by: Jakob Ackermann <jakob.ackermann@overleaf.com>
GitOrigin-RevId: 9f1ec6d38a7b037267737bec3b0bc53a0ac844af
2026-02-10 09:05:36 +00:00

78 lines
2.0 KiB
JavaScript

const { defineConfig } = require('vitest/config')
const COVERAGE_ENABLED = process.env.COVERAGE_UNIT_TESTS === 'true'
let reporterOptions = {}
if (process.env.CI && process.env.JUNIT_ROOT_SUITE_NAME) {
reporterOptions = {
maxWorkers: '50%',
reporters: [
'default',
[
'junit',
{
classnameTemplate: `${process.env.JUNIT_ROOT_SUITE_NAME}.{filename}`,
},
],
],
outputFile: 'data/reports/junit-vitest.xml',
}
}
module.exports = defineConfig({
test: {
setupFiles: ['./test/unit/bootstrap.mjs'],
globals: true,
isolate: false,
passWithNoTests: true, // in case there are no tests from one project or other in a module
projects: [
{
extends: true,
test: {
name: 'Parallel',
include: [
'modules/*/test/unit/**/*.test.mjs',
'test/unit/src/**/*.test.mjs',
],
sequence: {
groupOrder: 2,
},
exclude: ['**/*.sequential.test.mjs'],
fileParallelism: true,
},
},
{
extends: true,
test: {
name: 'Sequential',
sequence: {
groupOrder: 1,
},
include: [
'modules/*/test/unit/**/*.sequential.test.mjs',
'test/unit/src/**/*.sequential.test.mjs',
],
fileParallelism: false,
},
},
],
...reporterOptions,
hookTimeout: COVERAGE_ENABLED ? 20_000 : 10_000,
coverage: {
enabled: COVERAGE_ENABLED,
// Add 'sequential' / 'parallel' to the folder
reportsDirectory: `data/coverage/esm-unit-${(process.env.JUNIT_ROOT_SUITE_NAME || 'all').split(' ').pop()}`,
include: [
'app.mjs',
'app/**/*.{js,mjs}',
'modules/*/index.mjs',
'modules/*/app/src/**/*.{js,mjs}',
],
exclude: ['app/src/Features/Metadata/packageMapping.mjs'],
provider: 'istanbul',
reporters: ['console-details', 'clover'],
all: true,
},
},
})