playwright.config.ts (81 lines of code) (raw):

import { defineConfig, devices } from '@playwright/test'; const MAX_DIFF_PIXEL_RATIO = 0.025 as const; export default defineConfig({ forbidOnly: !!process.env.CI, retries: process.env.CI ? 2 : 0, reporter: process.env.CI ? 'dot' : 'list', snapshotDir: 'test/snapshots', expect: { toMatchSnapshot: { maxDiffPixelRatio: MAX_DIFF_PIXEL_RATIO }, toHaveScreenshot: { maxDiffPixelRatio: MAX_DIFF_PIXEL_RATIO } }, use: { baseURL: process.env.BASE_URL || 'http://localhost:9000', trace: 'off', screenshot: 'only-on-failure', video: 'retain-on-failure' }, projects: getProjects() }); function getProjects() { if (process.env.E2E_PROJECTS === 'breakpoints-v2') return [ { name: 'MS', use: { viewport: { width: 414, height: 736 }, deviceScaleFactor: 2, isMobile: true, hasTouch: true } }, { name: 'ML', use: { viewport: { width: 473, height: 896 }, deviceScaleFactor: 2, isMobile: true, hasTouch: true } }, { name: 'TS', use: { viewport: { width: 648, height: 864 }, deviceScaleFactor: 2, isMobile: true, hasTouch: true } }, { name: 'TL', use: { viewport: { width: 810, height: 1080 }, deviceScaleFactor: 2, isMobile: true, hasTouch: true } }, { name: 'DS', use: { viewport: { width: 1008, height: 1792 }, deviceScaleFactor: 2, isMobile: false, hasTouch: false } }, { name: 'DL', use: { viewport: { width: 1280, height: 720 }, deviceScaleFactor: 2, isMobile: false, hasTouch: false } } ]; return [{ name: 'chromium', use: { ...devices['Desktop Chrome'] } }]; }