import { startVitest } from 'vitest/node' // Set this to true when intentionally updating the snapshots const UPDATE_SNAPSHOTS = false const provider = process.argv[1 + process.argv.indexOf('--provider')] const isBrowser = process.argv.includes('--browser') const threadsConfig = [{ threads: true }, { threads: false }, { singleThread: true }] // Threads have no effect in browser mode if (isBrowser) threadsConfig.splice(1) const configs = [ // Run test cases. Generates coverage report. ['test/', { include: ['test/*.test.*'], exclude: [ 'coverage-report-tests/**/*', // TODO: Include once mocking is supported in browser isBrowser && '**/no-esbuild-transform.test.js', ].filter(Boolean), coverage: { enabled: true }, browser: { enabled: isBrowser, name: 'chrome', headless: true }, // Regression vitest#3330 reporters: ['default', 'junit'], outputFile: { junit: 'coverage/junit.xml' }, }], // Run tests for checking coverage report contents. ['coverage-report-tests', { include: [ ['c8', 'v8', 'istanbul'].includes(provider) && './coverage-report-tests/generic.report.test.ts', `./coverage-report-tests/${provider}.report.test.ts`, ].filter(Boolean), coverage: { enabled: false, clean: false }, }], ] // Prevent the "vitest/src/node/browser/webdriver.ts" from calling process.exit const exit = process.exit process.exit = () => !isBrowser && exit() for (const threads of threadsConfig) { for (const isolate of [true, false]) { for (const [directory, config] of configs) { // Retry flaky browser tests const retries = Array(config.browser?.enabled ? 3 : 1).fill(0) for (const retry of retries.keys()) { await startVitest('test', [directory], { name: `With settings: ${JSON.stringify({ ...threads, isolate, directory, browser: config.browser?.enabled })}`, ...config, update: UPDATE_SNAPSHOTS, ...threads, isolate, }) if (process.exitCode && retry === retries.length - 1) { console.error(`process.exitCode was set to ${process.exitCode}, exiting.`) exit() } else if (process.exitCode) { console.warn(`Browser tests failed, retrying ${1 + retry}/${retries.length - 1}...`) } else { break } } } } } exit()