chore: simplify test/ structure (#9367)

This commit is contained in:
Vladimir
2026-01-12 15:15:33 +01:00
committed by GitHub
parent cee2bddfe7
commit 697d8c1b2a
343 changed files with 2959 additions and 1994 deletions
+1 -1
View File
@@ -1,3 +1,3 @@
* text=auto eol=lf
test/reporters/fixtures/indicator-position.test.js eol=crlf
test/cli/fixtures/reporters/indicator-position.test.js eol=crlf
+8 -14
View File
@@ -14,8 +14,8 @@ import type {
import type { ParentBrowserProject } from './projectParent'
import { existsSync } from 'node:fs'
import { readFile } from 'node:fs/promises'
import { fileURLToPath } from 'node:url'
import { resolve } from 'pathe'
import { distRoot } from './constants'
import { BrowserServerState } from './state'
import { getBrowserProvider } from './utils'
@@ -25,41 +25,35 @@ export class ProjectBrowser implements IProjectBrowser {
public provider!: BrowserProvider
public vitest: Vitest
public vite: ViteDevServer
public config: ResolvedConfig
public children: Set<ProjectBrowser> = new Set<ProjectBrowser>()
public parent!: ParentBrowserProject
public state: BrowserServerState = new BrowserServerState()
constructor(
public parent: ParentBrowserProject,
public project: TestProject,
public base: string,
) {
this.vitest = project.vitest
this.config = project.config
this.vite = parent.vite
const pkgRoot = resolve(fileURLToPath(import.meta.url), '../..')
const distRoot = resolve(pkgRoot, 'dist')
// instances can override testerHtmlPath
const testerHtmlPath = project.config.browser.testerHtmlPath
? resolve(project.config.root, project.config.browser.testerHtmlPath)
: resolve(distRoot, 'client/tester/tester.html')
// TODO: when config resolution is rewritten, project and parentProject should be created before the vite server is started
if (!existsSync(testerHtmlPath)) {
throw new Error(`Tester HTML file "${testerHtmlPath}" doesn't exist.`)
}
this.testerFilepath = testerHtmlPath
this.testerHtml = readFile(
testerHtmlPath,
this.testerFilepath,
'utf8',
).then(html => (this.testerHtml = html))
}
get vite(): ViteDevServer {
return this.parent.vite
}
private commands = {} as Record<string, BrowserCommand<any, any>>
public registerCommand<K extends keyof BrowserCommands>(
@@ -130,7 +124,7 @@ export class ProjectBrowser implements IProjectBrowser {
}
async close(): Promise<void> {
await this.parent.vite.close()
await this.vite.close()
}
}
+1 -1
View File
@@ -147,10 +147,10 @@ export class ParentBrowserProject {
throw new Error(`Cannot spawn child server without a parent dev server.`)
}
const clone = new ProjectBrowser(
this,
project,
'/',
)
clone.parent = this
this.children.add(clone)
return clone
}
+1 -1
View File
@@ -505,7 +505,7 @@ export class TestProject {
[
this.vite?.close(),
this.typechecker?.stop(),
this.browser?.close(),
(this.browser || this._parent?._parentBrowser?.vite)?.close(),
this.clearTmpDir(),
].filter(Boolean),
).then(() => {
+5 -1
View File
@@ -35,6 +35,10 @@ export interface JUnitOptions {
* @default false
*/
addFileAttribute?: boolean
/**
* Hostname to use in the report. By default, it uses os.hostname()
*/
hostname?: string
}
function flattenTasks(task: Task, baseName = ''): Task[] {
@@ -373,7 +377,7 @@ export class JUnitReporter implements Reporter {
{
name: filename,
timestamp: new Date().toISOString(),
hostname: hostname(),
hostname: this.options.hostname || hostname(),
tests: file.tasks.length,
failures: file.stats.failures,
errors: 0, // An errored test is one that had an unanticipated problem. We cannot detect those.
+36 -84
View File
@@ -61,7 +61,7 @@ catalogs:
specifier: ^6.2.1
version: 6.2.1
flatted:
specifier: ^3.3.3
specifier: 3.3.3
version: 3.3.3
istanbul-lib-coverage:
specifier: ^3.2.2
@@ -90,6 +90,9 @@ catalogs:
pathe:
specifier: ^2.0.3
version: 2.0.3
playwright:
specifier: ^1.57.0
version: 1.57.0
sirv:
specifier: ^3.0.2
version: 3.0.2
@@ -105,9 +108,15 @@ catalogs:
tinyrainbow:
specifier: ^3.0.3
version: 3.0.3
typescript:
specifier: ^5.9.3
version: 5.9.3
unocss:
specifier: ^66.5.9
version: 66.5.9
vitest-sonar-reporter:
specifier: 3.0.0
version: 3.0.0
vue:
specifier: ^3.5.25
version: 3.5.25
@@ -1125,12 +1134,6 @@ importers:
specifier: workspace:*
version: link:../runner
test/benchmark:
devDependencies:
vitest:
specifier: workspace:*
version: link:../../packages/vitest
test/browser:
devDependencies:
'@types/react':
@@ -1179,12 +1182,6 @@ importers:
specifier: 'catalog:'
version: 8.18.3
test/cache:
devDependencies:
vitest:
specifier: workspace:*
version: link:../../packages/vitest
test/cli:
devDependencies:
'@opentelemetry/api':
@@ -1196,12 +1193,18 @@ importers:
'@opentelemetry/sdk-trace-web':
specifier: ^2.2.0
version: 2.2.0(@opentelemetry/[email protected])
'@test/pkg-reporter':
specifier: link:./deps/pkg-reporter
version: link:deps/pkg-reporter
'@test/test-dep-error':
specifier: file:./deps/error
version: file:test/cli/deps/error
'@test/test-dep-linked':
specifier: link:./deps/linked
version: link:deps/linked
'@test/test-dep-url':
specifier: link:./deps/dep-url
version: link:deps/dep-url
'@types/ws':
specifier: 'catalog:'
version: 8.18.1
@@ -1214,15 +1217,30 @@ importers:
'@vitest/browser-preview':
specifier: workspace:*
version: link:../../packages/browser-preview
'@vitest/browser-webdriverio':
specifier: workspace:*
version: link:../../packages/browser-webdriverio
'@vitest/mocker':
specifier: workspace:*
version: link:../../packages/mocker
'@vitest/runner':
specifier: workspace:^
specifier: workspace:*
version: link:../../packages/runner
'@vitest/utils':
specifier: workspace:*
version: link:../../packages/utils
flatted:
specifier: 'catalog:'
version: 3.3.3
obug:
specifier: ^2.1.1
version: 2.1.1
playwright:
specifier: 'catalog:'
version: 1.57.0
typescript:
specifier: 'catalog:'
version: 5.9.3
unplugin-swc:
specifier: ^1.5.9
version: 1.5.9(@swc/[email protected])([email protected])
@@ -1232,6 +1250,9 @@ importers:
vitest:
specifier: workspace:*
version: link:../../packages/vitest
vitest-sonar-reporter:
specifier: 'catalog:'
version: 3.0.0(vitest@packages+vitest)
ws:
specifier: 'catalog:'
version: 8.18.3
@@ -1461,56 +1482,7 @@ importers:
specifier: workspace:*
version: link:../../packages/vitest
test/global-setup:
devDependencies:
vitest:
specifier: workspace:*
version: link:../../packages/vitest
test/optimize-deps:
devDependencies:
'@vitest/test-dep-url':
specifier: file:./dep-url
version: '@vitest/test-deps-url@file:test/optimize-deps/dep-url'
vitest:
specifier: workspace:*
version: link:../../packages/vitest
test/public-mocker:
devDependencies:
'@vitest/browser':
specifier: workspace:*
version: link:../../packages/browser
'@vitest/mocker':
specifier: workspace:*
version: link:../../packages/mocker
playwright:
specifier: ^1.57.0
version: 1.57.0
vitest:
specifier: workspace:*
version: link:../../packages/vitest
test/reporters:
devDependencies:
'@vitest/browser-playwright':
specifier: workspace:*
version: link:../../packages/browser-playwright
'@vitest/runner':
specifier: workspace:*
version: link:../../packages/runner
flatted:
specifier: ^3.3.3
version: 3.3.3
pkg-reporter:
specifier: ./reportPkg/
version: link:reportPkg
vitest:
specifier: workspace:*
version: link:../../packages/vitest
vitest-sonar-reporter:
specifier: 3.0.0
version: 3.0.0(vitest@packages+vitest)
test/node-runner: {}
test/snapshots:
dependencies:
@@ -1562,21 +1534,6 @@ importers:
specifier: workspace:*
version: link:../../packages/vitest
test/watch:
devDependencies:
'@vitest/browser-playwright':
specifier: workspace:*
version: link:../../packages/browser-playwright
'@vitest/browser-webdriverio':
specifier: workspace:*
version: link:../../packages/browser-webdriverio
vite:
specifier: ^7.1.5
version: 7.1.5(@types/[email protected])([email protected])([email protected])([email protected])([email protected])([email protected])([email protected])([email protected])
vitest:
specifier: workspace:*
version: link:../../packages/vitest
test/workspaces:
devDependencies:
'@jridgewell/remapping':
@@ -4647,9 +4604,6 @@ packages:
'@vitest/test-dep2@file:test/core/deps/dep2':
resolution: {directory: test/core/deps/dep2, type: directory}
'@vitest/test-deps-url@file:test/optimize-deps/dep-url':
resolution: {directory: test/optimize-deps/dep-url, type: directory}
'@vitest/test-fn@file:test/core/deps/dep-fn':
resolution: {directory: test/core/deps/dep-fn, type: directory}
@@ -12603,8 +12557,6 @@ snapshots:
dependencies:
'@vitest/test-dep1': file:test/core/deps/dep1
'@vitest/test-deps-url@file:test/optimize-deps/dep-url': {}
'@vitest/test-fn@file:test/core/deps/dep-fn': {}
'@volar/[email protected]':
+13 -9
View File
@@ -3,6 +3,7 @@ catalogMode: prefer
shellEmulator: true
trustPolicy: no-downgrade
trustPolicyExclude:
- [email protected]
- [email protected]
@@ -17,31 +18,31 @@ trustPolicyExclude:
- [email protected]
- [email protected]
- [email protected]
packages:
- docs
- packages/*
- examples/*
- test/*
- test/config/fixtures/conditions-pkg
overrides:
'@vitest/browser': 'workspace:*'
'@vitest/browser-playwright': 'workspace:*'
'@vitest/browser-preview': 'workspace:*'
'@vitest/browser-webdriverio': 'workspace:*'
'@vitest/ui': 'workspace:*'
'@vitest/browser': workspace:*
'@vitest/browser-playwright': workspace:*
'@vitest/browser-preview': workspace:*
'@vitest/browser-webdriverio': workspace:*
'@vitest/ui': workspace:*
acorn: 8.11.3
mlly: ^1.8.0
rollup: $rollup
vite: $vite
vitest: 'workspace:*'
vitest: workspace:*
patchedDependencies:
'@sinonjs/[email protected]': patches/@[email protected]
'@types/[email protected]': patches/@[email protected]
[email protected]: patches/[email protected]
[email protected]: patches/[email protected]
istanbul-lib-source-maps: patches/istanbul-lib-source-maps.patch
catalog:
'@iconify-json/carbon': ^1.2.14
'@iconify-json/logos': ^1.2.10
@@ -61,7 +62,7 @@ catalog:
birpc: ^4.0.0
cac: ^6.7.14
chai: ^6.2.1
flatted: ^3.3.3
flatted: 3.3.3
istanbul-lib-coverage: ^3.2.2
istanbul-lib-report: ^3.0.1
istanbul-lib-source-maps: ^5.0.6
@@ -71,12 +72,15 @@ catalog:
msw: ^2.12.3
obug: ^2.1.1
pathe: ^2.0.3
playwright: ^1.57.0
sirv: ^3.0.2
std-env: ^3.10.0
strip-literal: ^3.1.0
tinyglobby: ^0.2.15
tinyrainbow: ^3.0.3
typescript: ^5.9.3
unocss: ^66.5.9
vitest-sonar-reporter: 3.0.0
vue: ^3.5.25
ws: ^8.18.3
onlyBuiltDependencies:
Vendored
-1
View File
@@ -1,2 +1 @@
/// <reference path="./packages/vitest/globals.d.ts" />
/// <reference path="./packages/vitest/importMeta.d.ts" />
-11
View File
@@ -1,11 +0,0 @@
{
"name": "@vitest/test-benchmark",
"type": "module",
"private": true,
"scripts": {
"test": "vitest"
},
"devDependencies": {
"vitest": "workspace:*"
}
}
@@ -1,14 +0,0 @@
// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
exports[`summary 1`] = `
"
good - summary.bench.ts > suite-a
(?) faster than bad
good - summary.bench.ts > suite-b
good - summary.bench.ts > suite-b > suite-b-nested
"
`;
-88
View File
@@ -1,88 +0,0 @@
import type { createBenchmarkJsonReport } from 'vitest/src/node/reporters/benchmark/json-formatter.js'
import fs from 'node:fs'
import * as pathe from 'pathe'
import { expect, it } from 'vitest'
import { runVitest } from '../../test-utils'
it('basic', { timeout: 60_000 }, async () => {
const root = pathe.join(import.meta.dirname, '../fixtures/basic')
const benchFile = pathe.join(root, 'bench.json')
fs.rmSync(benchFile, { force: true })
const result = await runVitest({
root,
allowOnly: true,
outputJson: 'bench.json',
// Verify that type testing cannot be used with benchmark
typecheck: { enabled: true },
}, [], { mode: 'benchmark' })
expect(result.stderr).toBe('')
expect(result.exitCode).toBe(0)
const benchResult = await fs.promises.readFile(benchFile, 'utf-8')
const resultJson: ReturnType<typeof createBenchmarkJsonReport> = JSON.parse(benchResult)
const names = resultJson.files.map(f => f.groups.map(g => [g.fullName, g.benchmarks.map(b => b.name)]))
expect(names).toMatchInlineSnapshot(`
[
[
[
"base.bench.ts > sort",
[
"normal",
"reverse",
],
],
[
"base.bench.ts > timeout",
[
"timeout100",
"timeout75",
"timeout50",
"timeout25",
],
],
],
[],
[
[
"only.bench.ts",
[
"visited",
"visited2",
],
],
[
"only.bench.ts > a0",
[
"0",
],
],
[
"only.bench.ts > a1 > b1 > c1",
[
"1",
],
],
[
"only.bench.ts > a2",
[
"2",
],
],
[
"only.bench.ts > a3 > b3",
[
"3",
],
],
[
"only.bench.ts > a4 > b4",
[
"4",
],
],
],
]
`)
})
-41
View File
@@ -1,41 +0,0 @@
import fs from 'node:fs'
import { expect, test } from 'vitest'
import { runVitest } from '../../test-utils'
test('compare', { timeout: 60_000 }, async () => {
await fs.promises.rm('./fixtures/compare/bench.json', { force: true })
// --outputJson
{
const result = await runVitest({
root: './fixtures/compare',
outputJson: './bench.json',
reporters: ['default'],
}, [], { mode: 'benchmark' })
expect(result.exitCode).toBe(0)
expect(fs.existsSync('./fixtures/compare/bench.json')).toBe(true)
}
// --compare
{
const result = await runVitest({
root: './fixtures/compare',
compare: './bench.json',
reporters: ['default'],
}, [], { mode: 'benchmark' })
expect(result.exitCode).toBe(0)
const lines = result.stdout.split('\n').slice(4).slice(0, 6)
const expected = `
✓ basic.bench.ts > suite
name
· sleep10
(baseline)
· sleep100
(baseline)
`
for (const [index, line] of expected.trim().split('\n').entries()) {
expect(lines[index]).toMatch(line.trim())
}
}
})
-55
View File
@@ -1,55 +0,0 @@
import * as pathe from 'pathe'
import { assert, expect, it } from 'vitest'
import { runVitest } from '../../test-utils'
it('summary', async () => {
const root = pathe.join(import.meta.dirname, '../fixtures/reporter')
const result = await runVitest({ root }, ['summary.bench.ts'], { mode: 'benchmark' })
expect(result.stderr).toBe('')
expect(result.stdout).not.toContain('NaNx')
expect(result.stdout.split('BENCH Summary')[1].replaceAll(/[0-9.]+x/g, '(?)')).toMatchSnapshot()
})
it('non-tty', async () => {
const root = pathe.join(import.meta.dirname, '../fixtures/basic')
const result = await runVitest({ root }, ['base.bench.ts'], { mode: 'benchmark' })
const lines = result.stdout.split('\n').slice(4).slice(0, 11)
const expected = `\
✓ base.bench.ts > sort
name
· normal
· reverse
✓ base.bench.ts > timeout
name
· timeout100
· timeout75
· timeout50
· timeout25
`
for (const [index, line] of expected.trim().split('\n').entries()) {
expect(lines[index]).toMatch(line)
}
})
it.for([true, false])('includeSamples %s', async (includeSamples) => {
const result = await runVitest(
{
root: pathe.join(import.meta.dirname, '../fixtures/reporter'),
benchmark: { includeSamples },
},
['summary.bench.ts'],
{ mode: 'benchmark' },
)
assert(result.ctx)
const allSamples = [...result.ctx.state.idMap.values()]
.filter(t => t.meta.benchmark)
.map(t => t.result?.benchmark?.samples)
if (includeSamples) {
expect(allSamples[0]).not.toEqual([])
}
else {
expect(allSamples[0]).toEqual([])
}
})
-11
View File
@@ -1,11 +0,0 @@
import fs from 'node:fs'
import * as pathe from 'pathe'
import { expect, it } from 'vitest'
import { runVitest } from '../../test-utils'
it('sequential', async () => {
const root = pathe.join(import.meta.dirname, '../fixtures/sequential')
await runVitest({ root }, [], { mode: 'benchmark' })
const testLog = await fs.promises.readFile(pathe.join(root, 'test.log'), 'utf-8')
expect(testLog).toMatchSnapshot()
})
-11
View File
@@ -1,11 +0,0 @@
{
"name": "@vitest/test-cache",
"type": "module",
"private": true,
"scripts": {
"test": "vitest"
},
"devDependencies": {
"vitest": "workspace:*"
}
}
-59
View File
@@ -1,59 +0,0 @@
import { expect, test } from 'vitest'
import { runVitest, useFS } from '../../test-utils'
test('if file has import.meta.glob, it\'s not cached', async () => {
const { createFile } = useFS('./fixtures/import-meta-glob/generated', {
1: '1',
2: '2',
}, false)
const { errorTree: errorTree1 } = await runVitest({
root: './fixtures/import-meta-glob',
provide: {
generated: ['./generated/1', './generated/2'],
},
experimental: {
fsModuleCache: true,
fsModuleCachePath: './node_modules/.vitest-fs-cache',
},
})
expect(errorTree1()).toMatchInlineSnapshot(`
{
"glob.test.js": {
"replaced variable is the same": "passed",
},
}
`)
createFile('3', '3')
const { errorTree: errorTree2 } = await runVitest({
root: './fixtures/import-meta-glob',
provide: {
generated: [
'./generated/1',
'./generated/2',
'./generated/3',
],
},
experimental: {
fsModuleCache: true,
fsModuleCachePath: './node_modules/.vitest-fs-cache',
},
})
expect(errorTree2()).toMatchInlineSnapshot(`
{
"glob.test.js": {
"replaced variable is the same": "passed",
},
}
`)
})
declare module 'vitest' {
export interface ProvidedContext {
generated: string[]
}
}
-14
View File
@@ -1,14 +0,0 @@
import { defineConfig } from 'vite'
export default defineConfig({
test: {
include: ['test/**.test.ts'],
includeTaskLocation: true,
reporters: ['verbose'],
testTimeout: 60_000,
fileParallelism: false,
chaiConfig: {
truncateThreshold: 999,
},
},
})
@@ -1,5 +1,5 @@
{
"name": "@vitest/test-deps-url",
"name": "@test/test-dep-url",
"type": "module",
"exports": "./index.js"
}
+4
View File
@@ -0,0 +1,4 @@
{
"name": "@test/pkg-reporter",
"main": "./index.js"
}
@@ -10,6 +10,7 @@ let config = defineConfig({
browser: {
enabled: true,
provider: playwright(),
headless: true,
instances: [
{ browser: 'chromium' },
],
@@ -0,0 +1,14 @@
// @vitest-environment node
// @ts-expect-error untyped
import { importMetaUrl } from '@test/test-dep-url'
import { expect, test } from 'vitest'
// TODO: flaky on Windows
// https://github.com/vitest-dev/vitest/pull/5215#discussion_r1492066033
test('import.meta.url', () => {
if (process.platform !== 'win32') {
expect(importMetaUrl).toContain('/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/deps_ssr/')
}
})
@@ -1,7 +1,7 @@
// @vitest-environment happy-dom
// @ts-expect-error untyped
import { importMetaUrl } from '@vitest/test-dep-url'
import { importMetaUrl } from '@test/test-dep-url'
import { expect, test } from 'vitest'
@@ -0,0 +1,5 @@
import { test } from 'vitest';
test('basic reporter test', () => {
// This is a placeholder test file for basic reporter tests.
})
@@ -0,0 +1,13 @@
import { defineConfig } from 'vitest/config'
export default defineConfig({
test: {
reporters: [
{
onInit(vitest) {
vitest.logger.log('hello from override')
},
},
],
},
})

Some files were not shown because too many files have changed in this diff Show More