Fix flaky E2E tests: layers panel, zoom-to-fit, snapshot stability

- layers-panel: navigate to /demo so demo layers exist
- app-menu zoom-to-fit: zoom in first so zoom-to-fit has something to change
- playwright.config: force workers=1 and colorScheme=dark for consistent
  WebGL/SwiftShader snapshot rendering across runs
- Update empty-canvas snapshot for current dark-mode canvas appearance
This commit is contained in:
Danila Poyarkov 2026-03-07 11:08:22 +03:00
parent bd5cdc8eee
commit 7fbe21c8e1
4 changed files with 10 additions and 2 deletions

View file

@ -3,6 +3,7 @@ import { defineConfig } from '@playwright/test'
export default defineConfig({
testDir: './tests',
timeout: 15_000,
workers: 1,
expect: {
toHaveScreenshot: {
maxDiffPixelRatio: 0.01,
@ -17,6 +18,7 @@ export default defineConfig({
baseURL: 'http://localhost:1420',
viewport: { width: 1280, height: 800 },
deviceScaleFactor: 2,
colorScheme: 'dark',
launchOptions: {
args: ['--enable-unsafe-swiftshader']
}
@ -24,7 +26,8 @@ export default defineConfig({
projects: [
{
name: 'openpencil',
testDir: './tests/e2e'
testDir: './tests/e2e',
fullyParallel: false
},
{
name: 'figma',

View file

@ -120,7 +120,12 @@ test('Duplicate via Edit menu works', async () => {
})
test('Zoom to fit via View menu works', async () => {
await page.locator('[role="menubar"] [role="menuitem"]', { hasText: 'View' }).click()
await page.locator('[role="menu"] [role="menuitem"]', { hasText: 'Zoom in' }).click()
await canvas.waitForRender()
const zoomBefore = await page.evaluate(() => window.__OPEN_PENCIL_STORE__!.state.zoom)
expect(zoomBefore).toBeGreaterThan(1)
await page.locator('[role="menubar"] [role="menuitem"]', { hasText: 'View' }).click()
await page.locator('[role="menu"] [role="menuitem"]', { hasText: 'Zoom to fit' }).click()

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

After

Width:  |  Height:  |  Size: 17 KiB

View file

@ -9,7 +9,7 @@ test.describe.configure({ mode: 'serial' })
test.beforeAll(async ({ browser }) => {
page = await browser.newPage()
await page.goto('/')
await page.goto('/demo')
canvas = new CanvasHelper(page)
await canvas.waitForInit()
})