···15181518- **Default:** `true`
15191519- **CLI:** `--browser.isolate`, `--browser.isolate=false`
1520152015211521-Isolate test environment after each test.
15211521+Run every test in a separate iframe.
15221522+15231523+### browser.fileParallelism <Badge type="info">1.3.0+</Badge>
15241524+15251525+- **Type:** `boolean`
15261526+- **Default:** the same as [`fileParallelism`](#fileparallelism-110)
15271527+- **CLI:** `--browser.fileParallelism=false`
15281528+15291529+Create all test iframes at the same time so they are running in parallel.
15301530+15311531+This makes it impossible to use interactive APIs (like clicking or hovering) because there are several iframes on the screen at the same time, but if your tests don't rely on those APIs, it might be much faster to just run all of them at the same time.
15321532+15331533+::: tip
15341534+If you disabled isolation via [`browser.isolate=false`](#browserisolate), your test files will still run one after another because of the nature of the test runner.
15351535+:::
1522153615231537#### browser.api
15241538
+10-1
packages/ws-client/src/index.ts
···1414 autoReconnect?: boolean
1515 reconnectInterval?: number
1616 reconnectTries?: number
1717+ connectTimeout?: number
1718 reactive?: <T>(v: T) => T
1819 ref?: <T>(v: T) => { value: T }
1920 WebSocketConstructor?: typeof WebSocket
···3334 autoReconnect = true,
3435 reconnectInterval = 2000,
3536 reconnectTries = 10,
3737+ connectTimeout = 60000,
3638 reactive = v => v,
3739 WebSocketConstructor = globalThis.WebSocket,
3840 } = options
···98100 }
99101100102 function registerWS() {
101101- openPromise = new Promise((resolve) => {
103103+ openPromise = new Promise((resolve, reject) => {
104104+ const timeout = setTimeout(() => {
105105+ reject(new Error(`Cannot connect to the server in ${connectTimeout / 1000} seconds`))
106106+ }, connectTimeout)?.unref?.()
107107+ if (ctx.ws.OPEN === ctx.ws.readyState)
108108+ resolve()
109109+ // still have a listener even if it's already open to update tries
102110 ctx.ws.addEventListener('open', () => {
103111 tries = reconnectTries
104112 resolve()
113113+ clearTimeout(timeout)
105114 })
106115 })
107116 ctx.ws.addEventListener('message', (v) => {