mirror of
https://github.com/vitest-dev/vitest.git
synced 2025-12-08 18:26:03 +00:00
192 lines
7.1 KiB
TypeScript
192 lines
7.1 KiB
TypeScript
import { readdirSync, rmSync } from 'node:fs'
|
||
import { resolve } from 'pathe'
|
||
import { afterEach, describe, expect, test } from 'vitest'
|
||
import { provider, runBrowserTests } from './utils'
|
||
|
||
const tracesFolder = resolve(import.meta.dirname, '../fixtures/trace-view/__traces__')
|
||
const basicTestTracesFolder = resolve(tracesFolder, 'basic.test.ts')
|
||
|
||
describe.runIf(provider.name === 'playwright')('playwright tracing', () => {
|
||
afterEach(() => {
|
||
rmSync(tracesFolder, { recursive: true, force: true })
|
||
})
|
||
|
||
test('vitest generates trace files when running with `on`', async () => {
|
||
const { stderr, ctx } = await runBrowserTests({
|
||
root: './fixtures/trace-view',
|
||
browser: {
|
||
trace: 'on',
|
||
},
|
||
includeTaskLocation: true,
|
||
})
|
||
|
||
expect(stderr).toBe('')
|
||
expect(readdirSync(tracesFolder)).toEqual(['basic.test.ts'])
|
||
expect(readdirSync(basicTestTracesFolder).sort()).toMatchInlineSnapshot(`
|
||
[
|
||
"chromium-a-single-test-0-0.trace.zip",
|
||
"chromium-nested-suite-suite-test-0-0.trace.zip",
|
||
"chromium-repeated-retried-tests-0-0.trace.zip",
|
||
"chromium-repeated-retried-tests-0-1.trace.zip",
|
||
"chromium-repeated-retried-tests-0-2.trace.zip",
|
||
"chromium-repeated-retried-tests-1-0.trace.zip",
|
||
"chromium-repeated-retried-tests-2-0.trace.zip",
|
||
"chromium-repeated-test-0-0.trace.zip",
|
||
"chromium-repeated-test-1-0.trace.zip",
|
||
"chromium-repeated-test-2-0.trace.zip",
|
||
"chromium-retried-test-0-0.trace.zip",
|
||
"chromium-retried-test-0-1.trace.zip",
|
||
"chromium-retried-test-0-2.trace.zip",
|
||
"firefox-a-single-test-0-0.trace.zip",
|
||
"firefox-nested-suite-suite-test-0-0.trace.zip",
|
||
"firefox-repeated-retried-tests-0-0.trace.zip",
|
||
"firefox-repeated-retried-tests-0-1.trace.zip",
|
||
"firefox-repeated-retried-tests-0-2.trace.zip",
|
||
"firefox-repeated-retried-tests-1-0.trace.zip",
|
||
"firefox-repeated-retried-tests-2-0.trace.zip",
|
||
"firefox-repeated-test-0-0.trace.zip",
|
||
"firefox-repeated-test-1-0.trace.zip",
|
||
"firefox-repeated-test-2-0.trace.zip",
|
||
"firefox-retried-test-0-0.trace.zip",
|
||
"firefox-retried-test-0-1.trace.zip",
|
||
"firefox-retried-test-0-2.trace.zip",
|
||
"webkit-a-single-test-0-0.trace.zip",
|
||
"webkit-nested-suite-suite-test-0-0.trace.zip",
|
||
"webkit-repeated-retried-tests-0-0.trace.zip",
|
||
"webkit-repeated-retried-tests-0-1.trace.zip",
|
||
"webkit-repeated-retried-tests-0-2.trace.zip",
|
||
"webkit-repeated-retried-tests-1-0.trace.zip",
|
||
"webkit-repeated-retried-tests-2-0.trace.zip",
|
||
"webkit-repeated-test-0-0.trace.zip",
|
||
"webkit-repeated-test-1-0.trace.zip",
|
||
"webkit-repeated-test-2-0.trace.zip",
|
||
"webkit-retried-test-0-0.trace.zip",
|
||
"webkit-retried-test-0-1.trace.zip",
|
||
"webkit-retried-test-0-2.trace.zip",
|
||
]
|
||
`)
|
||
|
||
// traces are also stored in attachments so they are visible in all reporters
|
||
const testModules = ctx.state.getTestModules()
|
||
expect(testModules).toHaveLength(3)
|
||
testModules.forEach((testModule) => {
|
||
for (const test of testModule.children.allTests()) {
|
||
if (test.result().state === 'skipped') {
|
||
continue
|
||
}
|
||
|
||
const annotations = test.annotations()
|
||
expect(annotations.length).toBeGreaterThan(0)
|
||
|
||
annotations.forEach((annotation) => {
|
||
expect(annotation.message).toContain('basic.test.ts/')
|
||
expect(annotation.type).toBe('traces')
|
||
expect(annotation.attachment!.contentType).toBe('application/octet-stream')
|
||
expect(annotation.location).toEqual({
|
||
file: test.module.moduleId,
|
||
line: test.location.line,
|
||
column: test.location.column,
|
||
})
|
||
})
|
||
}
|
||
})
|
||
})
|
||
|
||
test('vitest generates trace files when running with `on-all-retries`', async () => {
|
||
const { stderr } = await runBrowserTests({
|
||
root: './fixtures/trace-view',
|
||
browser: {
|
||
trace: 'on-all-retries',
|
||
},
|
||
})
|
||
|
||
expect(stderr).toBe('')
|
||
expect(readdirSync(tracesFolder)).toEqual(['basic.test.ts'])
|
||
expect(readdirSync(basicTestTracesFolder).sort()).toMatchInlineSnapshot(`
|
||
[
|
||
"chromium-repeated-retried-tests-0-1.trace.zip",
|
||
"chromium-repeated-retried-tests-0-2.trace.zip",
|
||
"chromium-retried-test-0-1.trace.zip",
|
||
"chromium-retried-test-0-2.trace.zip",
|
||
"firefox-repeated-retried-tests-0-1.trace.zip",
|
||
"firefox-repeated-retried-tests-0-2.trace.zip",
|
||
"firefox-retried-test-0-1.trace.zip",
|
||
"firefox-retried-test-0-2.trace.zip",
|
||
"webkit-repeated-retried-tests-0-1.trace.zip",
|
||
"webkit-repeated-retried-tests-0-2.trace.zip",
|
||
"webkit-retried-test-0-1.trace.zip",
|
||
"webkit-retried-test-0-2.trace.zip",
|
||
]
|
||
`)
|
||
})
|
||
|
||
test('vitest generates trace files when running with `on-first-retries`', async () => {
|
||
const { stderr } = await runBrowserTests({
|
||
root: './fixtures/trace-view',
|
||
browser: {
|
||
trace: 'on-first-retry',
|
||
},
|
||
})
|
||
|
||
expect(stderr).toBe('')
|
||
expect(readdirSync(tracesFolder)).toEqual(['basic.test.ts'])
|
||
expect(readdirSync(basicTestTracesFolder).sort()).toMatchInlineSnapshot(`
|
||
[
|
||
"chromium-repeated-retried-tests-0-1.trace.zip",
|
||
"chromium-retried-test-0-1.trace.zip",
|
||
"firefox-repeated-retried-tests-0-1.trace.zip",
|
||
"firefox-retried-test-0-1.trace.zip",
|
||
"webkit-repeated-retried-tests-0-1.trace.zip",
|
||
"webkit-retried-test-0-1.trace.zip",
|
||
]
|
||
`)
|
||
})
|
||
|
||
test('vitest generates trace files when running with `retain-on-failure`', async () => {
|
||
const { stderr } = await runBrowserTests({
|
||
root: './fixtures/trace-view',
|
||
include: ['./*.test.ts', './*.special.ts'],
|
||
browser: {
|
||
trace: 'retain-on-failure',
|
||
},
|
||
})
|
||
|
||
const failingTestTracesFolder = resolve(tracesFolder, 'failing.special.ts')
|
||
|
||
expect(readdirSync(tracesFolder)).toEqual([
|
||
'basic.test.ts',
|
||
'failing.special.ts',
|
||
])
|
||
expect(readdirSync(basicTestTracesFolder).sort()).toMatchInlineSnapshot(`[]`)
|
||
expect(readdirSync(failingTestTracesFolder).sort()).toMatchInlineSnapshot(`
|
||
[
|
||
"chromium-fail-0-0.trace.zip",
|
||
"chromium-repeated-fail-0-0.trace.zip",
|
||
"chromium-repeated-fail-1-0.trace.zip",
|
||
"chromium-repeated-fail-2-0.trace.zip",
|
||
"chromium-retried-fail-0-0.trace.zip",
|
||
"chromium-retried-fail-0-1.trace.zip",
|
||
"chromium-retried-fail-0-2.trace.zip",
|
||
"firefox-fail-0-0.trace.zip",
|
||
"firefox-repeated-fail-0-0.trace.zip",
|
||
"firefox-repeated-fail-1-0.trace.zip",
|
||
"firefox-repeated-fail-2-0.trace.zip",
|
||
"firefox-retried-fail-0-0.trace.zip",
|
||
"firefox-retried-fail-0-1.trace.zip",
|
||
"firefox-retried-fail-0-2.trace.zip",
|
||
"webkit-fail-0-0.trace.zip",
|
||
"webkit-repeated-fail-0-0.trace.zip",
|
||
"webkit-repeated-fail-1-0.trace.zip",
|
||
"webkit-repeated-fail-2-0.trace.zip",
|
||
"webkit-retried-fail-0-0.trace.zip",
|
||
"webkit-retried-fail-0-1.trace.zip",
|
||
"webkit-retried-fail-0-2.trace.zip",
|
||
]
|
||
`)
|
||
|
||
// the default reporter outputs attachments
|
||
expect(stderr).toContain('❯ traces')
|
||
expect(stderr).toContain('↳ __traces__/failing.special.ts/')
|
||
})
|
||
})
|