Skip to content

Commit 4700367

Browse files
authored
fix(browser): set server.open to false and move error handling after init (#5845)
1 parent 11a1636 commit 4700367

File tree

6 files changed

+24
-16
lines changed

6 files changed

+24
-16
lines changed

packages/browser/src/client/mocker.ts

+8-4
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,18 @@ import { getBrowserState } from './utils'
55

66
const now = Date.now
77

8+
interface SpyModule {
9+
spyOn: typeof import('vitest').vi['spyOn']
10+
}
11+
812
export class VitestBrowserClientMocker {
913
private queue = new Set<Promise<void>>()
1014
private mocks: Record<string, any> = {}
1115
private factories: Record<string, () => any> = {}
1216

13-
private spyModule!: typeof import('vitest')
17+
private spyModule!: SpyModule
1418

15-
public setSpyModule(mod: typeof import('vitest')) {
19+
public setSpyModule(mod: SpyModule) {
1620
this.spyModule = mod
1721
}
1822

@@ -187,7 +191,7 @@ export class VitestBrowserClientMocker {
187191
if (isFunction) {
188192
// mock and delegate calls to original prototype method, which should be also mocked already
189193
const original = this[key]
190-
const mock = spyModule.vi.spyOn(this, key as string).mockImplementation(original)
194+
const mock = spyModule.spyOn(this, key as string).mockImplementation(original)
191195
mock.mockRestore = () => {
192196
mock.mockReset()
193197
mock.mockImplementation(original)
@@ -197,7 +201,7 @@ export class VitestBrowserClientMocker {
197201
}
198202
}
199203
}
200-
const mock = spyModule.vi.spyOn(newContainer, property).mockImplementation(mockFunction)
204+
const mock = spyModule.spyOn(newContainer, property).mockImplementation(mockFunction)
201205
mock.mockRestore = () => {
202206
mock.mockReset()
203207
mock.mockImplementation(mockFunction)

packages/browser/src/client/tester.ts

+5-5
Original file line numberDiff line numberDiff line change
@@ -63,9 +63,6 @@ async function prepareTestEnvironment(files: string[]) {
6363

6464
const rpc: any = await loadSafeRpc(client)
6565

66-
stopErrorHandler()
67-
registerUnexpectedErrors(rpc)
68-
6966
const providedContext = await client.rpc.getProvidedContext()
7067

7168
const state: WorkerGlobalState = {
@@ -119,17 +116,20 @@ async function prepareTestEnvironment(files: string[]) {
119116
browserHashMap.set(filename, [true, version])
120117
})
121118

122-
const [runner, { startTests, setupCommonEnv, Vitest }] = await Promise.all([
119+
const [runner, { startTests, setupCommonEnv, Spy }] = await Promise.all([
123120
initiateRunner(config),
124121
importId('vitest/browser') as Promise<typeof import('vitest/browser')>,
125122
])
126123

127-
mocker.setSpyModule(Vitest)
124+
mocker.setSpyModule(Spy)
128125

129126
onCancel.then((reason) => {
130127
runner.onCancel?.(reason)
131128
})
132129

130+
stopErrorHandler()
131+
registerUnexpectedErrors(rpc)
132+
133133
return {
134134
runner,
135135
config,

packages/vitest/src/browser.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,4 @@ export {
1010
getCoverageProvider,
1111
startCoverageInsideWorker,
1212
} from './integrations/coverage'
13-
export * as Vitest from './index'
13+
export * as Spy from './integrations/spy'

packages/vitest/src/integrations/browser/server.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ export async function createBrowserServer(project: WorkspaceProject, configFile:
3535
enforce: 'post',
3636
name: 'vitest:browser:config',
3737
async config(config) {
38-
const server = resolveApiServerConfig(config.test?.browser || {}) || {
38+
const server = resolveApiServerConfig(config.test?.browser || {}, defaultBrowserPort) || {
3939
port: defaultBrowserPort,
4040
}
4141

@@ -45,6 +45,7 @@ export async function createBrowserServer(project: WorkspaceProject, configFile:
4545
config.server = {
4646
...config.server,
4747
...server,
48+
open: false,
4849
}
4950
config.server.fs ??= {}
5051
config.server.fs.allow = config.server.fs.allow || []

packages/vitest/src/node/config.ts

+5-3
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ function parseInspector(inspect: string | undefined | boolean | number) {
3838

3939
export function resolveApiServerConfig<Options extends ApiConfig & UserConfig>(
4040
options: Options,
41+
defaultPort: number,
4142
): ApiConfig | undefined {
4243
let api: ApiConfig | undefined
4344

@@ -407,7 +408,7 @@ export function resolveConfig(
407408
}
408409

409410
// the server has been created, we don't need to override vite.server options
410-
resolved.api = resolveApiServerConfig(options)
411+
resolved.api = resolveApiServerConfig(options, defaultPort)
411412

412413
if (options.related)
413414
resolved.related = toArray(options.related).map(file => resolve(resolved.root, file))
@@ -535,7 +536,8 @@ export function resolveConfig(
535536
resolved.browser.enabled ??= false
536537
resolved.browser.headless ??= isCI
537538
resolved.browser.isolate ??= true
538-
resolved.browser.ui ??= !isCI
539+
// disable in headless mode by default, and if CI is detected
540+
resolved.browser.ui ??= resolved.browser.headless === false ? true : !isCI
539541

540542
resolved.browser.viewport ??= {} as any
541543
resolved.browser.viewport.width ??= 414
@@ -544,7 +546,7 @@ export function resolveConfig(
544546
if (resolved.browser.enabled && stdProvider === 'stackblitz')
545547
resolved.browser.provider = 'preview'
546548

547-
resolved.browser.api = resolveApiServerConfig(resolved.browser) || {
549+
resolved.browser.api = resolveApiServerConfig(resolved.browser, defaultBrowserPort) || {
548550
port: defaultBrowserPort,
549551
}
550552

packages/vitest/src/node/plugins/index.ts

+3-2
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import { deepMerge, notNullish, removeUndefinedValues, toArray } from '../../uti
66
import { resolveApiServerConfig } from '../config'
77
import { Vitest } from '../core'
88
import { generateScopedClassName } from '../../integrations/css/css-modules'
9+
import { defaultPort } from '../../constants'
910
import { SsrReplacerPlugin } from './ssrReplacer'
1011
import { CSSEnablerPlugin } from './cssEnabler'
1112
import { CoverageTransform } from './coverageTransform'
@@ -48,7 +49,7 @@ export async function VitestPlugin(options: UserConfig = {}, ctx = new Vitest('t
4849
removeUndefinedValues(viteConfig.test ?? {}),
4950
options,
5051
)
51-
testConfig.api = resolveApiServerConfig(testConfig)
52+
testConfig.api = resolveApiServerConfig(testConfig, defaultPort)
5253

5354
// store defines for globalThis to make them
5455
// reassignable when running in worker in src/runtime/setup.ts
@@ -166,7 +167,7 @@ export async function VitestPlugin(options: UserConfig = {}, ctx = new Vitest('t
166167
viteConfigTest,
167168
options,
168169
)
169-
options.api = resolveApiServerConfig(options)
170+
options.api = resolveApiServerConfig(options, defaultPort)
170171

171172
// we replace every "import.meta.env" with "process.env"
172173
// to allow reassigning, so we need to put all envs on process.env

0 commit comments

Comments
 (0)