From 07905088c646d9edfd0b759bc8cf7e76040f157d Mon Sep 17 00:00:00 2001 From: Raul Macarie Date: Thu, 11 Jun 2026 09:33:31 +0200 Subject: [PATCH 1/2] docs: update Visual Regression Testing guide (#10514) --- .vitepress/components/MoonPhase.vue | 20 + guide/browser/visual-regression-testing.md | 675 +++++++++--------- public/visual-regression/diff-view-dark.avif | Bin 0 -> 231489 bytes public/visual-regression/diff-view-light.avif | Bin 0 -> 182635 bytes 4 files changed, 377 insertions(+), 318 deletions(-) create mode 100644 .vitepress/components/MoonPhase.vue create mode 100644 public/visual-regression/diff-view-dark.avif create mode 100644 public/visual-regression/diff-view-light.avif diff --git a/.vitepress/components/MoonPhase.vue b/.vitepress/components/MoonPhase.vue new file mode 100644 index 00000000..c8b64d55 --- /dev/null +++ b/.vitepress/components/MoonPhase.vue @@ -0,0 +1,20 @@ + + + diff --git a/guide/browser/visual-regression-testing.md b/guide/browser/visual-regression-testing.md index 75a877bd..a2242f58 100644 --- a/guide/browser/visual-regression-testing.md +++ b/guide/browser/visual-regression-testing.md @@ -3,71 +3,126 @@ title: Visual Regression Testing outline: [2, 3] --- + + # Visual Regression Testing -Vitest can run visual regression tests out of the box. It captures screenshots -of your UI components and pages, then compares them against reference images to -detect unintended visual changes. +Vitest can run visual regression tests out of the box. It captures screenshots of your UI components and pages, then compares them against reference images to detect unintended visual changes. -Unlike functional tests that verify behavior, visual tests catch styling issues, -layout shifts, and rendering problems that might otherwise go unnoticed without -thorough manual testing. +Unlike functional tests that verify behavior, visual tests catch styling issues, layout shifts, and rendering problems that might otherwise go unnoticed without thorough manual testing. -## Why Visual Regression Testing? +## Why visual regression testing? -Visual bugs don’t throw errors, they just look wrong. That’s where visual -testing comes in. +Visual bugs don’t throw errors, they just look wrong. That’s where visual testing comes in. - That button still submits the form... but why is it hot pink now? - The text fits perfectly... until someone views it on mobile -- Everything works great... except those two containers are out of viewport +- Everything works great... except those two containers are outside the viewport - That careful CSS refactor works... but broke the layout on a page no one tests -Visual regression testing acts as a safety net for your UI, automatically -catching these visual changes before they reach production. - -## Getting Started +Visual regression testing acts as a safety net for your UI, automatically catching these visual changes before they reach production. -::: warning Browser Rendering Differences -Visual regression tests are **inherently unstable across different -environments**. Screenshots will look different on different machines because -of: +## Example -- Font rendering (the big one. Windows, macOS, Linux, they all render text -differently) -- GPU drivers and hardware acceleration -- Whether you're running headless or not -- Browser settings and versions -- ...and honestly, sometimes just the phase of the moon - -That's why Vitest includes the browser and platform in screenshot names (like -`button-chromium-darwin.png`). - -For stable tests, use the same environment everywhere. We **strongly recommend** -cloud services like -[Azure App Testing](https://azure.microsoft.com/en-us/products/app-testing/) -or [Docker containers](https://playwright.dev/docs/docker). -::: - -Visual regression testing in Vitest can be done through the -[`toMatchScreenshot` assertion](/api/browser/assertions.html#tomatchscreenshot): +Visual regression testing in Vitest can be done through the [`toMatchScreenshot` assertion](/api/browser/assertions#tomatchscreenshot): ```ts import { expect, test } from 'vitest' import { page } from 'vitest/browser' -test('hero section looks correct', async () => { - // ...the rest of the test +test('button renders in default state', async () => { + // render your component // capture and compare screenshot - await expect(page.getByTestId('hero')).toMatchScreenshot('hero-section') + await expect(page.getByRole('button')).toMatchScreenshot() }) ``` -### Creating References +## Getting started + +### Environmental stability + +Visual regression tests are **sensitive to environmental differences** because rendering is not perfectly deterministic across environments and depends on multiple factors: + +- GPU, drivers, and hardware acceleration +- Operating System +- Font rendering pipelines +- Browser, browser versions, and settings +- Whether the browser is running headless or headed +- Screen scaling, color profiles, and display settings +- ...and occasionally what feels like the phase of the moon + +In practice, even seemingly identical environments can occasionally produce subtle rendering differences. For this reason, **visual regression tests are most reliable when run in a standardized and tightly controlled environment**. This is also why [Docker containers](https://playwright.dev/docs/docker), [CI-only visual testing workflows, or cloud services](#visual-testing-for-teams) are strongly recommended. + +### Not a replacement for behavior testing + +When a visual test fails alongside behavior tests, it's harder to tell what's actually broken or why. Visual failures are also expected during intentional UI work, but a failing unit test usually is not. Keeping them separate means each suite can fail loudly for the right reasons. + +It's worth calling out that **`toMatchScreenshot` is not a substitute for proper assertions**. + +A test that renders a button and just takes a screenshot is just documenting the current state. There's no way to tell from a screenshot whether users can interact with the button. **Visual tests work best as a complementary layer on top of behavior tests, not a replacement for them**. + +Put another way, **visual testing doesn't tell you why something renders the way it does**. It just tells you that something rendered a certain way, or a different way than it did last time. + +For example, take a business requirement to sort recent purchases in a table by purchase date. If you're looking only at the visual regression tests, you might notice that the same items from the last test are in a different order. This could be because you just introduced the sorting or because the sorting is broken. Either way, you don't know why the order is different just by looking at the UI. Someone could dismiss the visual diff as noise because the table "looks the same", even though the ordering logic is now broken. Now you have a broken business requirement in production. + +### Project structure + +Separating your visual suite from other tests gives you cleaner failure signals and a more deliberate update workflow. The recommended setup uses [projects](/guide/projects) with a `[name].vrt.test.[ext]` naming convention to keep them distinct, and runs them in headless mode for consistency. As the browser instance might have a different default size, it also sets a specific viewport size. + +```ts [vitest.config.ts] +import { defaultExclude, defineConfig } from 'vitest/config' + +const vrtPattern = '**/*.vrt.test.[tj]s?(x)' + +export default defineConfig({ + test: { + // ...other configurations + projects: [ + { + extends: true, + test: { + name: 'unit', + exclude: [vrtPattern, ...defaultExclude], + }, + }, + { + extends: true, + test: { + name: 'vrt', + browser: { + headless: true, + instances: [ + { + browser: '[browser-name]', + viewport: { width: 1280, height: 720 }, + }, + ], + }, + include: [vrtPattern], + }, + }, + ], + }, +}) +``` -When you run a visual test for the first time, Vitest creates a reference (also -called baseline) screenshot and fails the test with the following error message: +With this configuration in place, add scripts to launch each project separately: + +```json [package.json] +{ + "scripts": { + "test:unit": "vitest --project unit", + "test:visual": "vitest --project vrt" + } +} +``` + +### Creating references + +When you run a visual test for the first time, Vitest creates a reference (also called baseline) screenshot and fails the test with the following error message: ``` expect(element).toMatchScreenshot() @@ -75,78 +130,102 @@ expect(element).toMatchScreenshot() No existing reference screenshot found; a new one was created. Review it before running tests again. Reference screenshot: - tests/__screenshots__/hero.test.ts/hero-section-chromium-darwin.png + tests/__screenshots__/button.vrt.test.ts/button-default-state-chromium-darwin.png ``` -This is normal. Check that the screenshot looks right, then run the test again. -Vitest will now compare future runs against this baseline. +This is normal. Check that the screenshot looks right, then run the test again. Vitest will now compare future runs against this baseline. ::: tip -Reference screenshots live in `__screenshots__` folders next to your tests. -**Don't forget to commit them!** +Reference screenshots live in `__screenshots__` folders next to your tests. **Commit them to your repository.** ::: -### Screenshot Organization +### Screenshot organization By default, screenshots are organized as: ``` . ├── __screenshots__ -│ └── test-file.test.ts +│ └── test-file.vrt.test.ts │ ├── test-name-chromium-darwin.png │ ├── test-name-firefox-linux.png │ └── test-name-webkit-win32.png -└── test-file.test.ts +└── test-file.vrt.test.ts ``` The naming convention includes: -- **Test name**: either the first argument of the `toMatchScreenshot()` call, -or automatically generated from the test's name. -- **Browser name**: `chrome`, `chromium`, `firefox` or `webkit`. -- **Platform**: `aix`, `darwin`, `freebsd`, `linux`, `openbsd`, `sunos`, or -`win32`. +- **Test name**: either the first argument of the `toMatchScreenshot()` call, or automatically generated from the test's name. +- **Browser name**: depends on the configured browser provider, for example `chrome`, `chromium`, `firefox` or `webkit`. +- **Platform**: `aix`, `darwin`, `freebsd`, `linux`, `openbsd`, `sunos`, or `win32`. This ensures screenshots from different environments don't overwrite each other. -### Updating References +### Updating references -When you intentionally change your UI, you'll need to update the reference -screenshots: +When you intentionally change your UI, you'll need to update the reference screenshots just as you would update snapshots: ```bash -$ vitest --update +$ vitest --project vrt --update ``` -Review updated screenshots before committing to make sure changes are -intentional. +Review updated screenshots before committing to make sure changes are intentional. -## How Visual Tests Work +::: warning Stale screenshots +Note that **screenshots for deleted or renamed tests aren't removed automatically**. Clean up the `__screenshots__` folder manually when you remove or rename tests, otherwise stale references will accumulate over time. +::: -Visual regression tests need stable screenshots to compare against. But pages aren't instantly stable as images load, animations finish, fonts render, and layouts settle. +### Debugging failed tests -Vitest handles this automatically through "Stable Screenshot Detection": +When a visual test fails, Vitest provides three images to help debug: -1. Vitest takes a first screenshot (or uses the reference screenshot if available) as baseline -1. It takes another screenshot and compares it with the baseline - - If the screenshots match, the page is stable and testing continues - - If they differ, Vitest uses the newest screenshot as the baseline and repeats -1. This continues until stability is achieved or the timeout is reached +1. **Reference screenshot**: the expected baseline image +1. **Actual screenshot**: what was captured during the test +1. **Diff image**: highlights the differences; only generated when the screenshots have the same dimensions (behavior may vary with custom matchers) -This ensures that transient visual changes (like loading spinners or animations) don't cause false failures. If something never stops animating though, you'll hit the timeout, so consider [disabling animations during testing](#disable-animations). +You'll see something like this in the CLI output: -If a stable screenshot is captured after retries (one or more) and a reference screenshot exists, Vitest performs a final comparison with the reference using `createDiff: true`. This will generate a diff image if they don't match. +``` +expect(element).toMatchScreenshot() -During stability detection, Vitest calls comparators with `createDiff: false` since it only needs to know if screenshots match. This keeps the detection process fast. +Screenshot does not match the stored reference. +245 pixels (ratio 0.03) differ. -## Configuring Visual Tests +Reference screenshot: + tests/__screenshots__/button.vrt.test.ts/button-chromium-darwin.png -### Global Configuration +Actual screenshot: + tests/.vitest/attachments/button.vrt.test.ts/button-chromium-darwin-actual.png -Configure visual regression testing defaults in your -[Vitest config](/config/browser/expect#tomatchscreenshot): +Diff image: + tests/.vitest/attachments/button.vrt.test.ts/button-chromium-darwin-diff.png +``` -```ts [vitest.config.ts] +While in UI mode, Vitest shows a tabbed diff view with an A/B slider as shown below. + +
+ Animated demo of the visual regression diff view, switching tabs and using the slider to reveal differences + Animated demo of the visual regression diff view, switching tabs and using the slider to reveal differences + + An example of the visual regression diff UI, showing the "Diff", "Reference", "Actual", and "Slider" tabs, and how the slider reveals unexpected visual changes in a component. +
+ +#### Understanding the diff image + +- **Red pixels** are areas that differ between reference and actual +- **Yellow pixels** are anti-aliasing differences (when anti-alias is not ignored) +- **Transparent/original** are unchanged areas + +:::tip +If the diff is mostly red, something's really wrong. If it's speckled with a few red pixels around text, you probably just need to bump your threshold. +::: + +## Configuring the `toMatchScreenshot` assertion + +It's possible to configure the `toMatchScreenshot` assertion either globally, by changing its default options, or on a per-test basis. + +To change the defaults, you have to change the [Vitest config](/config/browser/expect#tomatchscreenshot): + +```ts{6-16} [vitest.config.ts] import { defineConfig } from 'vitest/config' export default defineConfig({ @@ -168,12 +247,10 @@ export default defineConfig({ }) ``` -### Per-Test Configuration +For more fine-grained control, override global settings in specific tests by passing options directly to the assertion: -Override global settings for specific tests: - -```ts -await expect(element).toMatchScreenshot('button-hover', { +```ts{2-6} +await expect(element).toMatchScreenshot('button', { comparatorName: 'pixelmatch', comparatorOptions: { // more lax comparison for text-heavy elements @@ -182,149 +259,178 @@ await expect(element).toMatchScreenshot('button-hover', { }) ``` -## Best Practices +## Third-party comparators -### Test Specific Elements +Vitest ships with `pixelmatch` as its built-in comparator. It's fast, compares images pixel-by-pixel, has no native dependencies, and handles the majority of cases well. Perceptual comparators aren't included by default because they bring heavier dependencies and there's no clear single "best one" to pick as different algorithms make different trade-offs, but the comparator API exists precisely to let you plug in whatever fits your needs. This decision may change as the ecosystem matures, though. -Unless you explicitly want to test the whole page, prefer capturing specific -components to reduce false positives: +For use cases where pixel-level diffing produces excessive noise, a perceptual or structural similarity comparator may be a better fit. These compare images more like a human would, tolerating minor rendering differences while still detecting meaningful visual changes. -```ts -// ❌ Captures entire page; prone to unrelated changes -await expect(page).toMatchScreenshot() +There are many algorithms, so these are a useful starting point: -// ✅ Captures only the component under test -await expect(page.getByTestId('product-card')).toMatchScreenshot() -``` +- [`@blazediff/ssim`](https://blazediff.dev/docs/ssim), [SSIM (Structural Similarity Index)](https://en.wikipedia.org/wiki/Structural_similarity_index_measure) implementations for perceptual image quality assessment. It offers standard SSIM, MS-SSIM (Multi-Scale SSIM), and Hitchhiker’s SSIM for various use cases +- [`@blazediff/gmsd`](https://blazediff.dev/docs/gmsd), a single-threaded GMSD (Gradient Magnitude Similarity Deviation) metric for perceptual image quality assessment, good for CI environments -### Handle Dynamic Content +To use one, install and register it: -Dynamic content like timestamps, user data, or random values will cause tests -to fail. You can either mock the sources of dynamic content or mask them when -using the Playwright provider by using the -[`mask` option](https://playwright.dev/docs/api/class-page#page-screenshot-option-mask) -in `screenshotOptions`. +```ts{5-11,18-46} [vitest.config.ts] +import ssim from '@blazediff/ssim/ssim' +import type { SsimOptionsExtended } from '@blazediff/ssim/ssim' +import { defineConfig } from 'vitest/config' -```ts -await expect(page.getByTestId('profile')).toMatchScreenshot({ - screenshotOptions: { - mask: [page.getByTestId('last-seen')], +declare module 'vitest/browser' { + interface ScreenshotComparatorRegistry { + 'standard-ssim': SsimOptionsExtended & { + threshold?: number + } + } +} + +export default defineConfig({ + test: { + browser: { + expect: { + toMatchScreenshot: { + comparators: { + // naive implementation, always check the library's docs + 'standard-ssim': ( + reference, + actual, + { createDiff, ...options } + ) => { + const diffBuffer = createDiff + ? new Uint8Array(reference.data.length) + : undefined + + const output = ssim( + reference.data, + actual.data, + diffBuffer, + reference.metadata.width, + reference.metadata.height, + options, + ) + + const pass = output >= (options.threshold ?? 0.95) + + return { + pass, + diff: diffBuffer ?? null, + message: pass ? null : `SSIM score: ${output}.`, + } + }, + }, + }, + }, + }, }, }) ``` -### Disable Animations +Once registered, the comparator can be referenced by name in your config or on a per-test basis: -Animations can cause flaky tests. Disable them during testing by injecting -a custom CSS snippet: +:::code-group -```css -*, *::before, *::after { - animation-duration: 0s !important; - animation-delay: 0s !important; - transition-duration: 0s !important; - transition-delay: 0s !important; -} +```ts{8} [vitest.config.ts] +import { defineConfig } from 'vitest/config' + +export default defineConfig({ + test: { + browser: { + expect: { + toMatchScreenshot: { + comparatorName: 'standard-ssim', + }, + }, + }, + }, +}) +``` + +```ts{2} [button.vrt.test.tsx] +await expect(button).toMatchScreenshot('button', { + comparatorName: 'standard-ssim', +}) ``` -::: tip -When using the Playwright provider, animations are automatically disabled -when using the assertion: the `animations` option's value in `screenshotOptions` -is set to `"disabled"` by default. ::: -### Set Appropriate Thresholds +## Best practices -Tuning thresholds is tricky. It depends on the content, test environment, -what's acceptable for your app, and might also change based on the test. +### Test specific elements -Vitest does not set a default for the mismatching pixels, that's up for the -user to decide based on their needs. The recommendation is to use -`allowedMismatchedPixelRatio`, so that the threshold is computed on the size -of the screenshot and not a fixed number. +Unless you explicitly want to test the whole page, prefer capturing specific components to reduce false positives: -When setting both `allowedMismatchedPixelRatio` and -`allowedMismatchedPixels`, Vitest uses whichever limit is stricter. +```ts +// ❌ Captures entire page; prone to unrelated changes +await expect(page).toMatchScreenshot() -### Set consistent viewport sizes +// ✅ Captures only the component under test +await expect( + page.getByRole('article', { name: 'Tote bag' }) +).toMatchScreenshot() +``` -As the browser instance might have a different default size, it's best to -set a specific viewport size, either on the test or the instance -configuration: +### Handle dynamic content -```ts -await page.viewport(1280, 720) -``` +Dynamic content like timestamps, user data, or random values will cause tests to fail. Either mock the underlying data sources or mask them using the [`mask` option](https://playwright.dev/docs/api/class-page#page-screenshot-option-mask) in `screenshotOptions` when using the Playwright provider. -```ts [vitest.config.ts] -import { playwright } from '@vitest/browser-playwright' -import { defineConfig } from 'vitest/config' +```ts{8} +const profile = page.getByRole( + 'article', + { name: 'Gracie\'s profile' }, +) -export default defineConfig({ - test: { - browser: { - enabled: true, - provider: playwright(), - instances: [ - { - browser: 'chromium', - viewport: { width: 1280, height: 720 }, - }, - ], - }, +await expect(profile).toMatchScreenshot({ + screenshotOptions: { + mask: [profile.getByRole('status')], }, }) ``` -### Use Git LFS +### Disable animations -Store reference screenshots in -[Git LFS](https://github.com/git-lfs/git-lfs?tab=readme-ov-file) if you plan to -have a large test suite. - -## Debugging Failed Tests +::: tip +When using the Playwright provider, animations are automatically disabled when using the built-in assertion: the `animations` option's value in `screenshotOptions` is set to `"disabled"` by default. -When a visual test fails, Vitest provides three images to help debug: +If you prefer to disable all animations to save some execution time, continue reading. +::: -1. **Reference screenshot**: the expected baseline image -1. **Actual screenshot**: what was captured during the test -1. **Diff image**: highlights the differences, but this might not get generated +Animations can cause flaky tests. Disable them during testing by injecting a custom CSS snippet using [`setupFiles`](/config/setupfiles) or directly in your tests: -You'll see something like: +```ts +const stylesheet = document.createElement('style') + +stylesheet.textContent = /* css */` + *, *::before, *::after { + animation-duration: 0s !important; + animation-delay: 0s !important; + transition-duration: 0s !important; + transition-delay: 0s !important; + } +` +document.head.appendChild(stylesheet) ``` -expect(element).toMatchScreenshot() -Screenshot does not match the stored reference. -245 pixels (ratio 0.03) differ. +Alternatively, you can declare the CSS in a custom HTML template by using [`browser.testerHtmlPath`](/config/browser/testerhtmlpath). -Reference screenshot: - tests/__screenshots__/button.test.ts/button-chromium-darwin.png +### Set appropriate thresholds -Actual screenshot: - tests/.vitest/attachments/button.test.ts/button-chromium-darwin-actual.png +Tuning thresholds is tricky. It depends on the content, test environment, what's acceptable for your app, and might also change based on the test. -Diff image: - tests/.vitest/attachments/button.test.ts/button-chromium-darwin-diff.png -``` +Vitest does not define a default tolerance for mismatched pixels. The appropriate value depends on your application and environment. The recommendation is to use `allowedMismatchedPixelRatio`, so that the threshold is computed on the size of the screenshot and not a fixed number. -### Understanding the diff image +When setting both `allowedMismatchedPixelRatio` and `allowedMismatchedPixels`, Vitest uses whichever limit is stricter. -- **Red pixels** are areas that differ between reference and actual -- **Yellow pixels** are anti-aliasing differences (when anti-alias is not ignored) -- **Transparent/original** are unchanged areas +### Use Git LFS -:::tip -If the diff is mostly red, something's really wrong. If it's speckled with a -few red pixels around text, you probably just need to bump your threshold. -::: +Store reference screenshots in [Git LFS](https://github.com/git-lfs/git-lfs?tab=readme-ov-file) if you plan to have a large test suite. -## Common Issues and Solutions +## Common issues and solutions -### False Positives from Font Rendering +### False positives from font rendering -Font availability and rendering varies significantly between systems. Some -possible solutions might be to: +Font availability and rendering varies significantly between systems. Some possible solutions might be to: - Use web fonts and wait for them to load: @@ -337,8 +443,10 @@ possible solutions might be to: - Increase comparison threshold for text-heavy areas: - ```ts - await expect(page.getByTestId('article-summary')).toMatchScreenshot({ + ```ts{6-7} + await expect( + page.getByRole('article', { name: 'How to grow tomatoes' }) + ).toMatchScreenshot({ comparatorName: 'pixelmatch', comparatorOptions: { // 10% of the pixels are allowed to change @@ -347,82 +455,40 @@ possible solutions might be to: }) ``` -- Use a cloud service or containerized environment for consistent font rendering. +- [Consider a shared environment setup](#visual-testing-for-teams) for consistent font rendering. -### Flaky Tests or Different Screenshot Sizes +### Flaky tests or different screenshot sizes -If tests pass and fail randomly, or if screenshots have different dimensions -between runs: +If tests pass and fail randomly, or if screenshots have different dimensions between runs: - Wait for everything to load, including loading indicators - Set explicit viewport sizes: `await page.viewport(1920, 1080)` - Check for responsive behavior at viewport boundaries - Check for unintended animations or transitions - Increase test timeout for large screenshots -- Use a cloud service or containerized environment - -## Visual Regression Testing for Teams +- [Consider a shared environment setup](#visual-testing-for-teams) -Remember when we mentioned visual tests need a stable environment? Well, here's -the thing: your local machine isn't it. +## Visual testing for teams -For teams, you've basically got three options: +Even with a controlled local setup, references generated on one machine will often fail on another. This matters as soon as more than one person is running the suite. -1. **Self-hosted runners**, complex to set up, painful to maintain -1. **GitHub Actions**, free (for open source), works with any provider -1. **Cloud services**, like -[Azure App Testing](https://azure.microsoft.com/en-us/products/app-testing/), -built for this exact problem +Running the visual regression suite in a shared environment solves this problem. There are three ways to do this: -We'll focus on options 2 and 3 since they're the quickest to get running. +1. **Self-hosted runners** (e.g., Docker images), complex to set up and maintain +1. **Generate references in CI**, which requires some setup +1. **Cloud services**, like [Azure App Testing](https://azure.microsoft.com/en-us/products/app-testing/), built to solve this exact problem, but usually restricted to specific providers and browsers -To be upfront, the main trade-offs for each are: +Options 2 and 3 are the quickest to get running, so those are covered below. -- **GitHub Actions**: visual tests only run in CI (developers can't run them -locally) -- **Microsoft's service**: works everywhere but costs money and only works -with Playwright +:::: tabs key:shared-environment-vrt +=== GitHub Actions (CI) -:::: tabs key:vrt-for-teams -=== GitHub Actions - -The trick here is keeping visual tests separate from your regular tests, -otherwise, you'll waste hours checking failing logs of screenshot mismatches. - -### Organizing Your Tests - -First, isolate your visual tests. Stick them in a `visual` folder (or whatever -makes sense for your project): - -```json [package.json] -{ - "scripts": { - "test:unit": "vitest --exclude tests/visual/*.test.ts", - "test:visual": "vitest tests/visual/*.test.ts" - } -} -``` - -Now developers can run `npm run test:unit` locally without visual tests getting -in the way. Visual tests stay in CI where the environment is consistent. - -::: tip Alternative -Not a fan of glob patterns? You could also use separate -[Test Projects](/guide/projects) instead and run them using: - -- `vitest --project unit` -- `vitest --project visual` -::: - -### CI Setup - -Your CI needs browsers installed. How you do this depends on your provider: +GitHub runners don't have browsers preinstalled. Install them before running tests, using the steps for your provider: ::: tabs key:provider == Playwright -[Playwright](https://npmx.dev/package/playwright) makes this easy. Just pin -your version and add this before running tests: +[Playwright](https://npmx.dev/package/playwright) makes this easy. Just pin your version and add this step before running tests: ```yaml [.github/workflows/ci.yml] # ...the rest of the workflow @@ -432,9 +498,7 @@ your version and add this before running tests: == WebdriverIO -[WebdriverIO](https://npmx.dev/package/webdriverio) expects you to bring -your own browsers. The folks at -[@browser-actions](https://github.com/browser-actions) have your back: +[WebdriverIO](https://npmx.dev/package/webdriverio) installs browsers automatically if none can be found when a test run starts, but it's recommended to decouple the installation process. To help with this, the folks at [@browser-actions](https://github.com/browser-actions) have packaged scripts to install [Chrome](https://github.com/browser-actions/setup-chrome), [Edge](https://github.com/browser-actions/setup-edge), and [Firefox](https://github.com/browser-actions/setup-firefox) in convenient reusable actions: ```yaml [.github/workflows/ci.yml] # ...the rest of the workflow @@ -445,7 +509,7 @@ your own browsers. The folks at ::: -Then run your visual tests: +Then in your existing workflow run the visual tests: ```yaml [.github/workflows/ci.yml] # ...the rest of the workflow @@ -454,12 +518,11 @@ Then run your visual tests: run: npm run test:visual ``` -### The Update Workflow +### The update workflow + +Running `vitest --update` locally would generate screenshots on your machine, defeating the whole point of a controlled environment. Instead, you need a way to trigger the update in CI where the environment matches the one that runs the tests. -Here's where it gets interesting. You don't want to update screenshots on every -PR automatically *(chaos!)*. Instead, create a -manually-triggered workflow that developers can run when they intentionally -change the UI. +You don't want this to happen automatically on every PR *(chaos!)*. Instead, create a manually-triggered workflow that runs when there are intentional changes to the UI. The workflow below: - Only runs on feature branches (never on main) @@ -477,10 +540,9 @@ The workflow below: Action summary after no updates ::: tip -This is just one approach. Some teams prefer PR comments (`/update-screenshots`), -others use labels. Adjust it to fit your workflow! +This is just one approach. Some prefer PR comments (`/update-screenshots`), others use labels. Adjust it to fit your workflow. -The important part is having a controlled way to update baselines. +The important part is having a controlled way to update reference screenshots. ::: ```yaml [.github/workflows/update-screenshots.yml] @@ -537,7 +599,6 @@ jobs: - name: Install Playwright Browsers run: npx --no playwright install --with-deps --only-shell - # the magic happens below 🪄 - name: Update Visual Regression Screenshots run: npm run test:visual --update @@ -594,44 +655,30 @@ jobs: fi ``` -=== Azure App Testing +=== Azure App Testing (Cloud service) -Your tests stay local, only the browsers run in the cloud. It's Playwright's -remote browser feature, but Microsoft handles all the infrastructure. +With this method, your tests stay local but the browsers run in the cloud. This is built on top of Playwright's remote browser feature and Azure handles all the infrastructure. -### Organizing Your Tests +Everyone uses the same cloud browsers, so references are consistent regardless of who runs them. Tests work locally, you pay only for what you use, and there's nothing to maintain. -Keep visual tests separate to control costs. Only tests that actually take -screenshots should use the service. +### Configuration -The cleanest approach is using [Test Projects](/guide/projects): +To have Playwright connect to the browsers spawned within the service, you have to update the provider configuration. -```ts [vitest.config.ts] +```ts{14-28} [vitest.config.ts] import { env } from 'node:process' import { defineConfig } from 'vitest/config' import { playwright } from '@vitest/browser-playwright' export default defineConfig({ - // ...global Vite config - tests: { - // ...global Vitest config + test: { + // ...other configurations projects: [ { extends: true, test: { - name: 'unit', - include: ['tests/**/*.test.ts'], - // regular config, can use local browsers - }, - }, - { - extends: true, - test: { - name: 'visual', - // or you could use a different suffix, e.g.,: `tests/**/*.visual.ts?(x)` - include: ['visual-regression-tests/**/*.test.ts?(x)'], + name: 'vrt', browser: { - enabled: true, provider: playwright({ connectOptions: { wsEndpoint: `${env.PLAYWRIGHT_SERVICE_URL}?${new URLSearchParams({ @@ -650,63 +697,45 @@ export default defineConfig({ headless: true, instances: [ { - browser: 'chromium', - viewport: { width: 2560, height: 1440 }, + browser: '[browser-name]', + viewport: { width: 1280, height: 720 }, }, ], }, + include: [vrtPattern], }, }, + // ...other projects ], }, }) ``` -Follow the [official guide to create a Playwright Workspace](https://learn.microsoft.com/en-us/azure/app-testing/playwright-workspaces/quickstart-run-end-to-end-tests?tabs=playwrightcli&pivots=playwright-test-runner#create-a-workspace). +To create a Playwright Workspace follow the [official guide](https://learn.microsoft.com/en-us/azure/app-testing/playwright-workspaces/quickstart-run-end-to-end-tests?tabs=playwrightcli&pivots=playwright-test-runner#create-a-workspace). Once your workspace is created, configure Vitest to use it: 1. **Set the endpoint URL**: following the [official guide](https://learn.microsoft.com/en-us/azure/app-testing/playwright-workspaces/quickstart-run-end-to-end-tests?tabs=playwrightcli&pivots=playwright-test-runner#configure-the-browser-endpoint), retrieve the URL and set it as the `PLAYWRIGHT_SERVICE_URL` environment variable. 1. **Enable token authentication**: [enable access tokens](https://learn.microsoft.com/en-us/azure/app-testing/playwright-workspaces/how-to-manage-authentication?pivots=playwright-test-runner#enable-authentication-using-access-tokens) for your workspace, then [generate a token](https://learn.microsoft.com/en-us/azure/app-testing/playwright-workspaces/how-to-manage-access-tokens#generate-a-workspace-access-token) and set it as the `PLAYWRIGHT_SERVICE_ACCESS_TOKEN` environment variable. -::: danger Keep that Token Secret! -Never commit `PLAYWRIGHT_SERVICE_ACCESS_TOKEN` to your repository. Anyone with -the token can rack up your bill. Use environment variables locally and secrets -in CI. +::: danger Keep that token secret! +Never commit `PLAYWRIGHT_SERVICE_ACCESS_TOKEN` to your repository. Anyone with the token can rack up your bill. Use environment variables locally and secrets in CI. ::: -Then split your `test` script like this: - -```json [package.json] -{ - "scripts": { - "test:visual": "vitest --project visual", - "test:unit": "vitest --project unit" - } -} -``` - -### Running Tests +### Running tests ```bash # Local development -npm run test:unit # free, runs locally +npm run test:unit # runs locally using your browsers npm run test:visual # uses cloud browsers # Update screenshots npm run test:visual -- --update ``` -The best part of this approach is that it just works: +### CI setup -- **Consistent screenshots**, everyone uses the same cloud browsers -- **Works locally**, developers can run and update visual tests on their machines -- **Pay for what you use**, only visual tests consume service minutes -- **No Docker or workflow setups needed**, nothing to manage or maintain - -### CI Setup - -In your CI, add the secrets: +Add the secrets to your CI configuration: ```yaml env: @@ -714,26 +743,36 @@ env: PLAYWRIGHT_SERVICE_ACCESS_TOKEN: ${{ secrets.PLAYWRIGHT_SERVICE_ACCESS_TOKEN }} ``` -Then run your tests like normal. The service handles the rest. +Then run your tests like normal. The service handles the browser infrastructure. :::: -### So Which One? +### Picking the right option + +All approaches work. The real question is what pain points matter most to you and your team. + +If you're comfortable with containerization, a self-hosted Docker setup gives you a controlled environment without any external dependencies or costs. The downside is maintenance as you own the setup, the browser versions, and any breakage. -Both approaches work. The real question is what pain points matter most to your -team. +CI runs work with any browser provider and give you full control, but screenshots can only be generated in CI. If someone runs `vitest --update` locally and commits the result, those references will likely fail on the next CI run. This is preventable by guarding the command behind a CI environment check. -If you're already deep in the GitHub ecosystem, GitHub Actions is hard to beat. -Free for open source, works with any browser provider, and you control -everything. +A cloud service makes sense if you want developers to be able to run and update visual tests locally without risking mismatched references. It becomes even more useful when designers are involved in reviewing changes, or when the push-wait-check-fix-push cycle becomes a real bottleneck. -The downside? That "works on my machine" conversation when someone generates -screenshots locally and they don't match CI expectations anymore. +Still on the fence? Start with the CI workflow. You can always move to a container or cloud service later if it becomes a pain point. -A cloud service makes sense if developers need to run visual tests locally. +## Going deeper -Some teams have designers checking their work or developers who prefer catching -issues before pushing. It allows skipping the push-wait-check-fix-push cycle. +### How Vitest ensures screenshot stability -Still on the fence? Start with GitHub Actions. You can always add a cloud -service later if local testing becomes a pain point. +Visual regression tests rely on screenshots remaining stable across runs. In practice, pages are not instantly stable: images load asynchronously, animations finish at different times, fonts render, and layouts settle. To mitigate this, Vitest uses a "Stable Screenshot Detection" strategy: + +1. It takes an initial screenshot (or uses the reference screenshot if available) as baseline +1. It takes another screenshot and compares it with the baseline + - If the screenshots match, the page is stable and testing continues + - If they differ, Vitest uses the newest screenshot as the baseline and repeats +1. This continues until stability is achieved or the timeout is reached + +This ensures that transient visual changes (like loading spinners or animations) don't cause false positives. If something never stops animating, though, you'll hit the timeout, so consider [disabling animations during testing](#disable-animations). + +If a stable screenshot is captured after one or more retries and a reference screenshot exists, Vitest performs a final comparison with the reference using `createDiff: true`. This will generate a diff image if they don't match. + +During stability detection, Vitest calls comparators with `createDiff: false` since it only needs to know if screenshots match. This keeps the detection process fast. diff --git a/public/visual-regression/diff-view-dark.avif b/public/visual-regression/diff-view-dark.avif new file mode 100644 index 0000000000000000000000000000000000000000..4bf961cb17904933cdc7b50d29b0a26429c1e946 GIT binary patch literal 231489 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

QJ=0TInL9ETl9Bk)kFbFX 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