Something went wrong. Try again.
[READ-ONLY] Mirror of https://github.com/vitest-dev/vitest. Next generation testing framework powered by Vite. vitest.dev
test testing-tools vite
Something went wrong. Try again.
TypeScript
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109import type { TestFsStructure } from '../../test-utils'import { describe, expect, test } from 'vitest'import { runInlineTests } from '../../test-utils'import utilsContent from '../fixtures/expect-dom/utils?raw'
const testFilename = 'basic.test.ts'
async function runBrowserTests(structure: TestFsStructure) { return runInlineTests({ ...structure, 'vitest.config.js': ` import { instances, provider } from '../settings.ts'
export default { test: { browser: { enabled: true, screenshotFailures: true, provider, ui: false, headless: true, instances: instances.slice(0, 1), // logic not bound to browser instance }, reporters: ['verbose'], update: 'new', }, }`, })}
function extractScreenshotPath(string: string): string | undefined { return string.match(/- (vitest-test-.*?\.png)/)[1]}
describe('failure screenshots', () => { describe('`toMatchScreenshot`', () => { test('usually does NOT produce a failure screenshot', async () => { const { stderr } = await runBrowserTests({ [testFilename]: /* ts */ ` import { page } from 'vitest/browser' import { test } from 'vitest' import { render } from './utils'
test('screenshot-initial', async ({ expect }) => { render('<div data-testid="el">Test</div>') await expect(page.getByTestId('el')).toMatchScreenshot() }) `, 'utils.ts': utilsContent, })
expect(stderr).toContain('No existing reference screenshot found; a new one was created.') expect(stderr).not.toContain('Failure screenshot:') })
test('unstable screenshot fails produces a failure screenshot', async () => { const { stderr } = await runBrowserTests({ [testFilename]: /* ts */ ` import { page } from 'vitest/browser' import { test } from 'vitest' import { render } from './utils'
test('screenshot-unstable', async ({ expect }) => { render('<div data-testid="el">Test</div>') await expect(page.getByTestId('el')).toMatchScreenshot({ timeout: 1 }) }) `, 'utils.ts': utilsContent, })
expect(stderr).toContain('Could not capture a stable screenshot within 1ms.') expect(stderr).toContain('Failure screenshot:')
const screenshotPath = extractScreenshotPath(stderr)
expect(screenshotPath).toContain( '.vitest/attachments/failure-screenshots/basic.test.ts/screenshot-unstable.png', ) })
test('`expect.soft` produces a failure screenshot', async () => { const { stderr } = await runBrowserTests({ [testFilename]: /* ts */ ` import { page } from 'vitest/browser' import { test } from 'vitest' import { render } from './utils'
test('screenshot-soft-then-fail', async ({ expect }) => { render('<div data-testid="el">Test</div>') await expect.soft(page.getByTestId('el')).toMatchScreenshot() expect(1).toBe(2) }) `, 'utils.ts': utilsContent, })
expect(stderr).toContain('No existing reference screenshot found; a new one was created.') expect(stderr).toContain('expected 1 to be 2') expect(stderr).toContain('Failure screenshot:')
const screenshotPath = extractScreenshotPath(stderr)
expect(screenshotPath).toContain( '.vitest/attachments/failure-screenshots/basic.test.ts/screenshot-soft-then-fail.png', ) }) })})