import { expect, test } from 'vitest'
import { instances, runInlineBrowserTests } from './utils'
test('prepare waits until the tester can receive browser channel events', { timeout: 5000 }, async () => {
const { stderr, testTree } = await runInlineBrowserTests(
{
'basic.test.ts': `
import { expect, test } from 'vitest'
test('runs in the browser', () => {
expect(1).toBe(1)
})
`,
'delayed-tester.html': `
Delayed Tester
`,
},
{
browser: {
instances: [instances[0]],
testerHtmlPath: './delayed-tester.html',
},
},
)
expect(stderr).toBe('')
expect(testTree()).toMatchInlineSnapshot(`
{
"basic.test.ts": {
"runs in the browser": "passed",
},
}
`)
})
test('fails instead of hanging when the tester never becomes ready', { timeout: 20000 }, async () => {
const { stderr, fs, testTree } = await runInlineBrowserTests(
{
'basic.test.ts': `
import { expect, test } from 'vitest'
test('never runs', () => {
expect(1).toBe(1)
})
`,
'silent-tester.html': `
`,
},
{
env: { VITEST_BROWSER_IFRAME_TIMEOUT: '2000' },
browser: {
instances: [instances[0]],
testerHtmlPath: './silent-tester.html',
},
},
)
expect(stderr).toContain(`Failed to run the test ${fs.resolveFile('basic.test.ts')}`)
expect(stderr).toContain(`The iframe "${fs.resolveFile('basic.test.ts')}" did not become ready within 2000ms. The tester likely failed to initialize, check the browser console for errors.`)
expect(testTree()).toMatchInlineSnapshot(`{}`)
})
test('fails instead of hanging when the tester stops responding to messages', { timeout: 20000 }, async () => {
const { stderr, fs, testTree } = await runInlineBrowserTests(
{
'basic.test.ts': `
import { expect, test } from 'vitest'
test('never runs', () => {
expect(1).toBe(1)
})
`,
'unresponsive-tester.html': `
`,
},
{
env: { VITEST_BROWSER_IFRAME_TIMEOUT: '2000' },
browser: {
instances: [instances[0]],
testerHtmlPath: './unresponsive-tester.html',
},
},
)
expect(stderr).toContain(`Failed to run the test ${fs.resolveFile('basic.test.ts')}`)
expect(stderr).toContain(`The iframe "${fs.resolveFile('basic.test.ts')}" did not acknowledge the "prepare" message within 2000ms. The tester might have crashed, been removed, or be blocked by a long synchronous task.`)
expect(testTree()).toMatchInlineSnapshot(`{}`)
})