Skip to content

Commit 4add951

Browse files
authoredJan 9, 2024
fix(browser): fix testNamePattern config (#4909)
1 parent 8e6c104 commit 4add951

File tree

4 files changed

+61
-4
lines changed

4 files changed

+61
-4
lines changed
 

‎packages/browser/src/client/main.ts

+13
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { createClient } from '@vitest/ws-client'
22
import type { ResolvedConfig } from 'vitest'
33
import type { CancelReason, VitestRunner } from '@vitest/runner'
4+
import { parseRegexp } from '@vitest/utils'
45
import type { VitestExecutor } from '../../../vitest/src/runtime/execute'
56
import { createBrowserRunner } from './runner'
67
import { importId as _importId } from './utils'
@@ -51,6 +52,7 @@ async function loadConfig() {
5152
try {
5253
await new Promise(resolve => setTimeout(resolve, 150))
5354
config = await client.rpc.getConfig()
55+
config = unwrapConfig(config)
5456
return
5557
}
5658
catch (_) {
@@ -62,6 +64,17 @@ async function loadConfig() {
6264
throw new Error('cannot load configuration after 5 retries')
6365
}
6466

67+
function unwrapConfig(config: ResolvedConfig): ResolvedConfig {
68+
return {
69+
...config,
70+
// workaround RegExp serialization
71+
testNamePattern:
72+
config.testNamePattern
73+
? parseRegexp((config.testNamePattern as any as string))
74+
: undefined,
75+
}
76+
}
77+
6578
function on(event: string, listener: (...args: any[]) => void) {
6679
window.addEventListener(event, listener)
6780
return () => window.removeEventListener(event, listener)

‎packages/vitest/src/api/setup.ts

+16-2
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,9 @@ import type { ViteDevServer } from 'vite'
1111
import type { StackTraceParserOptions } from '@vitest/utils/source-map'
1212
import { API_PATH } from '../constants'
1313
import type { Vitest } from '../node'
14-
import type { File, ModuleGraphData, Reporter, TaskResultPack, UserConsoleLog } from '../types'
14+
import type { File, ModuleGraphData, Reporter, ResolvedConfig, TaskResultPack, UserConsoleLog } from '../types'
1515
import { getModuleGraph, isPrimitive, stringifyReplace } from '../utils'
16-
import type { WorkspaceProject } from '../node/workspace'
16+
import { WorkspaceProject } from '../node/workspace'
1717
import { parseErrorStacktrace } from '../utils/source-map'
1818
import type { TransformResultWithSource, WebSocketEvents, WebSocketHandlers } from './types'
1919

@@ -114,6 +114,9 @@ export function setup(vitestOrWorkspace: Vitest | WorkspaceProject, _server?: Vi
114114
await ctx.rerunFiles(files)
115115
},
116116
getConfig() {
117+
if (vitestOrWorkspace instanceof WorkspaceProject)
118+
return wrapConfig(vitestOrWorkspace.getSerializableConfig())
119+
117120
return vitestOrWorkspace.config
118121
},
119122
async getTransformResult(id) {
@@ -215,3 +218,14 @@ class WebSocketReporter implements Reporter {
215218
})
216219
}
217220
}
221+
222+
function wrapConfig(config: ResolvedConfig): ResolvedConfig {
223+
return {
224+
...config,
225+
// workaround RegExp serialization
226+
testNamePattern:
227+
config.testNamePattern
228+
? config.testNamePattern.toString() as any as RegExp
229+
: undefined,
230+
}
231+
}

‎test/browser/specs/filter.test.mjs

+27
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
import assert from 'node:assert'
2+
import test from 'node:test'
3+
import { execa } from 'execa'
4+
5+
test('filter', async () => {
6+
const result = await execa(
7+
'npx',
8+
[
9+
'vitest',
10+
'run',
11+
'test/basic.test.ts',
12+
'--testNamePattern',
13+
'basic 2',
14+
'--browser.headless',
15+
'--reporter=verbose',
16+
],
17+
{
18+
env: {
19+
CI: '1',
20+
NO_COLOR: '1',
21+
},
22+
},
23+
)
24+
assert.match(result.stdout, / test\/basic.test.ts > basic 2/)
25+
assert.match(result.stdout, /Test Files {2}1 passed/)
26+
assert.match(result.stdout, /Tests {2}1 passed | 3 skipped/)
27+
})

‎test/browser/vitest.config.mts

+5-2
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,9 @@ const dir = dirname(fileURLToPath(import.meta.url))
66

77
function noop() {}
88

9+
const provider = process.env.PROVIDER || 'webdriverio'
10+
const browser = process.env.BROWSER || (provider === 'playwright' ? 'chromium' : 'chrome')
11+
912
export default defineConfig({
1013
server: {
1114
headers: {
@@ -19,9 +22,9 @@ export default defineConfig({
1922
include: ['test/**.test.{ts,js}'],
2023
browser: {
2124
enabled: true,
22-
name: process.env.BROWSER || 'chrome',
25+
name: browser,
2326
headless: false,
24-
provider: process.env.PROVIDER || 'webdriverio',
27+
provider,
2528
isolate: false,
2629
slowHijackESM: true,
2730
},

0 commit comments

Comments
 (0)
Please sign in to comment.