Files
whynot-design/playwright.config.mjs
tegwick 0f96736bb7 fix(visual): deterministic baselines + vendored lit (WHYNOT-WP-0002 T11)
Regenerate the four whynot-control visual baselines against the T06 token
regen, and make the harness render deterministically:

- serve.json (cleanUrls:false): serve was 301-redirecting /…/index.html and
  stripping the trailing slash, shifting the document base so every relative
  asset 404'd (also broke `pnpm showcase` in a browser).
- examples/whynot-control/index.html: token stylesheet pointed at a
  non-existent root path; repoint to ../../src/styles/colors_and_type.css so
  the page actually loads the T06 tokens.
- examples/vendor/lit.js: vendor a self-contained esbuild lit bundle and point
  the showcase importmap at it, removing the multi-hop live esm.sh dependency.
- tests/visual/ui-kit.spec.mjs: abort the unused Google-Fonts CDN (fonts are
  system-ui post-IBM-Plex); a hung font request blocked module execution.

The showcase "every component" test is marked test.fixme: that page wedges the
renderer main thread (a demo composition loops) and has never produced a
baseline. Tracked as WHYNOT-WP-0002-T11. Components + vendored lit render fine
in isolation; the four control baselines pass deterministically.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-26 21:08:06 +02:00

32 lines
825 B
JavaScript

import { defineConfig, devices } from "@playwright/test";
export default defineConfig({
testDir: "./tests/visual",
fullyParallel: true,
forbidOnly: !!process.env.CI,
retries: 0,
reporter: [["html", { open: "never" }], ["list"]],
use: {
baseURL: "http://localhost:4321",
headless: true,
viewport: { width: 1280, height: 800 },
deviceScaleFactor: 2,
},
projects: [
{ name: "chromium", use: { ...devices["Desktop Chrome"] } },
],
webServer: {
// Serve the entire repo root so showcase + UI kit + assets all resolve via relative URLs.
command: "npx --yes serve -l 4321 .",
url: "http://localhost:4321",
reuseExistingServer: !process.env.CI,
stdout: "ignore",
stderr: "pipe",
},
expect: {
toHaveScreenshot: {
maxDiffPixelRatio: 0.005,
},
},
});