mirror of
https://github.com/hanzoai/vitest.git
synced 2026-09-24 17:04:25 +00:00
134 lines
3.8 KiB
TypeScript
134 lines
3.8 KiB
TypeScript
import type { BrowserProviderOption } from 'vitest/node'
|
|
import { expect, test } from 'vitest'
|
|
import { runInlineTests } from '../../test-utils'
|
|
import { instances, provider, runInlineBrowserTests } from './utils'
|
|
|
|
function spyOnPrewarm() {
|
|
const prewarmed: (string | undefined)[] = []
|
|
const spyProvider: BrowserProviderOption = {
|
|
...provider,
|
|
prewarm(ctx) {
|
|
prewarmed.push(ctx.config.name)
|
|
provider.prewarm?.(ctx)
|
|
},
|
|
}
|
|
// config resolution assigns `name` on the instance objects,
|
|
// so the shared settings array cannot be reused between runs
|
|
const freshInstances = instances.map(instance => ({ ...instance }))
|
|
return { prewarmed, spyProvider, freshInstances }
|
|
}
|
|
|
|
const basicTest = `
|
|
import { test } from 'vitest'
|
|
test('works', () => {})
|
|
`
|
|
|
|
test('prewarm receives only the instances matching the --project filter', async () => {
|
|
const { prewarmed, spyProvider, freshInstances } = spyOnPrewarm()
|
|
const target = instances[0].browser!
|
|
|
|
const result = await runInlineBrowserTests({
|
|
'basic.test.ts': basicTest,
|
|
}, {
|
|
project: [target],
|
|
browser: { provider: spyProvider, instances: freshInstances },
|
|
})
|
|
|
|
expect(result.stderr).toBe('')
|
|
expect(prewarmed).toEqual([target])
|
|
})
|
|
|
|
test('prewarm receives only the matching instances of a workspace project', async () => {
|
|
const { prewarmed, spyProvider, freshInstances } = spyOnPrewarm()
|
|
const target = `browser (${instances[0].browser})`
|
|
|
|
const { stderr } = await runInlineTests({
|
|
'basic.test.ts': basicTest,
|
|
}, {
|
|
watch: false,
|
|
reporters: 'none',
|
|
project: [target],
|
|
projects: [
|
|
{
|
|
test: {
|
|
name: 'browser',
|
|
browser: {
|
|
enabled: true,
|
|
provider: spyProvider,
|
|
instances: freshInstances,
|
|
headless: true,
|
|
},
|
|
},
|
|
},
|
|
],
|
|
})
|
|
|
|
expect(stderr).toBe('')
|
|
expect(prewarmed).toEqual([target])
|
|
})
|
|
|
|
test('prewarm uses the provider from the resolved instance project', async () => {
|
|
const prewarmed: { browser: string | undefined; name: string }[] = []
|
|
const instanceProvider: BrowserProviderOption = {
|
|
...provider,
|
|
prewarm(ctx) {
|
|
prewarmed.push({
|
|
browser: ctx.config.browser.name,
|
|
name: ctx.config.name,
|
|
})
|
|
provider.prewarm?.(ctx)
|
|
},
|
|
}
|
|
const target = instances[0].browser!
|
|
const freshInstances = instances.map((instance, index) => ({
|
|
...instance,
|
|
provider: index === 0 ? instanceProvider : undefined,
|
|
}))
|
|
|
|
const result = await runInlineBrowserTests({
|
|
'basic.test.ts': basicTest,
|
|
}, {
|
|
project: [target],
|
|
browser: { provider: undefined, instances: freshInstances },
|
|
})
|
|
|
|
expect(result.stderr).toBe('')
|
|
expect(prewarmed).toEqual([{ browser: target, name: target }])
|
|
})
|
|
|
|
test('does not prewarm a project without test files', async () => {
|
|
const { prewarmed, spyProvider } = spyOnPrewarm()
|
|
let projectNames: string[] = []
|
|
const browser = instances[0].browser!
|
|
|
|
const result = await runInlineBrowserTests({
|
|
'basic.test.ts': basicTest,
|
|
}, {
|
|
browser: {
|
|
provider: spyProvider,
|
|
instances: [
|
|
{ browser, name: 'with tests', include: ['basic.test.ts'] },
|
|
{ browser, name: 'without tests', include: ['missing.test.ts'] },
|
|
],
|
|
},
|
|
$viteConfig: {
|
|
plugins: [
|
|
{
|
|
name: 'capture-projects',
|
|
configureVitest({ project, vitest }) {
|
|
projectNames = vitest.projects.map(project => project.name)
|
|
if (project.name === 'without tests') {
|
|
project.config.include = ['basic.test.ts']
|
|
}
|
|
},
|
|
},
|
|
],
|
|
},
|
|
})
|
|
|
|
expect(result.stderr).toBe('')
|
|
expect(prewarmed).toEqual(['with tests'])
|
|
expect(projectNames).toEqual(['with tests', 'without tests'])
|
|
expect(result.ctx!.state.getFiles().map(file => file.projectName).sort()).toEqual(['with tests', 'without tests'])
|
|
})
|