From e8c01fb93c4c5ac019fa465c2414ad2809765e1b Mon Sep 17 00:00:00 2001 From: Danila Poyarkov Date: Sat, 28 Feb 2026 07:35:52 +0300 Subject: [PATCH] =?UTF-8?q?Speed=20up=20E2E=20tests:=20reuse=20page,=2014s?= =?UTF-8?q?=20=E2=86=92=204.6s?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/e2e/create-shapes.spec.ts | 92 ++++++++++-------- ...> draw-and-delete-1-openpencil-darwin.png} | Bin ... => draw-and-undo-1-openpencil-darwin.png} | Bin ...g => draw-ellipse-1-openpencil-darwin.png} | Bin ...=> draw-rectangle-1-openpencil-darwin.png} | Bin ...ngle-then-move-it-1-openpencil-darwin.png} | Bin ...g => empty-canvas-1-openpencil-darwin.png} | Bin tests/helpers/canvas.ts | 8 +- 8 files changed, 58 insertions(+), 42 deletions(-) rename tests/e2e/create-shapes.spec.ts-snapshots/{create-shapes-draw-and-delete-1-openpencil-darwin.png => draw-and-delete-1-openpencil-darwin.png} (100%) rename tests/e2e/create-shapes.spec.ts-snapshots/{create-shapes-draw-and-undo-1-openpencil-darwin.png => draw-and-undo-1-openpencil-darwin.png} (100%) rename tests/e2e/create-shapes.spec.ts-snapshots/{create-shapes-draw-ellipse-1-openpencil-darwin.png => draw-ellipse-1-openpencil-darwin.png} (100%) rename tests/e2e/create-shapes.spec.ts-snapshots/{create-shapes-draw-rectangle-1-openpencil-darwin.png => draw-rectangle-1-openpencil-darwin.png} (100%) rename tests/e2e/create-shapes.spec.ts-snapshots/{create-shapes-draw-rectangle-then-move-it-1-openpencil-darwin.png => draw-rectangle-then-move-it-1-openpencil-darwin.png} (100%) rename tests/e2e/create-shapes.spec.ts-snapshots/{create-shapes-empty-canvas-1-openpencil-darwin.png => empty-canvas-1-openpencil-darwin.png} (100%) diff --git a/tests/e2e/create-shapes.spec.ts b/tests/e2e/create-shapes.spec.ts index 10d0d2d4f..c143ef31f 100644 --- a/tests/e2e/create-shapes.spec.ts +++ b/tests/e2e/create-shapes.spec.ts @@ -1,47 +1,57 @@ -import { test, expect } from '@playwright/test' +import { test, expect, type Page } from '@playwright/test' import { CanvasHelper } from '../helpers/canvas' -test.describe('create shapes', () => { - let canvas: CanvasHelper +let page: Page +let canvas: CanvasHelper - test.beforeEach(async ({ page }) => { - await page.goto('/?test') - canvas = new CanvasHelper(page) - await canvas.waitForInit() - }) +test.describe.configure({ mode: 'serial' }) - test('empty canvas', async () => { - await expect(canvas.canvas).toHaveScreenshot({ timeout: 3000 }) - }) - - test('draw rectangle', async () => { - await canvas.drawRect(100, 100, 200, 150) - await expect(canvas.canvas).toHaveScreenshot({ timeout: 3000 }) - }) - - test('draw ellipse', async () => { - await canvas.drawEllipse(100, 100, 200, 150) - await expect(canvas.canvas).toHaveScreenshot({ timeout: 3000 }) - }) - - test('draw rectangle then move it', async () => { - await canvas.drawRect(100, 100, 200, 150) - await canvas.selectTool('select') - await canvas.drag(200, 175, 400, 300) - await canvas.waitForRender() - await expect(canvas.canvas).toHaveScreenshot({ timeout: 3000 }) - }) - - test('draw and delete', async () => { - await canvas.drawRect(100, 100, 200, 150) - await canvas.deleteSelection() - await expect(canvas.canvas).toHaveScreenshot({ timeout: 3000 }) - }) - - test('draw and undo', async () => { - await canvas.drawRect(100, 100, 200, 150) - await canvas.undo() - await expect(canvas.canvas).toHaveScreenshot({ timeout: 3000 }) - }) +test.beforeAll(async ({ browser }) => { + page = await browser.newPage() + await page.goto('/?test') + canvas = new CanvasHelper(page) + await canvas.waitForInit() +}) + +test.afterAll(async () => { + await page.close() +}) + +test.beforeEach(async () => { + await canvas.clearCanvas() +}) + +test('empty canvas', async () => { + await expect(canvas.canvas).toHaveScreenshot({ timeout: 3000 }) +}) + +test('draw rectangle', async () => { + await canvas.drawRect(100, 100, 200, 150) + await expect(canvas.canvas).toHaveScreenshot({ timeout: 3000 }) +}) + +test('draw ellipse', async () => { + await canvas.drawEllipse(100, 100, 200, 150) + await expect(canvas.canvas).toHaveScreenshot({ timeout: 3000 }) +}) + +test('draw rectangle then move it', async () => { + await canvas.drawRect(100, 100, 200, 150) + await canvas.selectTool('select') + await canvas.drag(200, 175, 400, 300) + await canvas.waitForRender() + await expect(canvas.canvas).toHaveScreenshot({ timeout: 3000 }) +}) + +test('draw and delete', async () => { + await canvas.drawRect(100, 100, 200, 150) + await canvas.deleteSelection() + await expect(canvas.canvas).toHaveScreenshot({ timeout: 3000 }) +}) + +test('draw and undo', async () => { + await canvas.drawRect(100, 100, 200, 150) + await canvas.undo() + await expect(canvas.canvas).toHaveScreenshot({ timeout: 3000 }) }) diff --git a/tests/e2e/create-shapes.spec.ts-snapshots/create-shapes-draw-and-delete-1-openpencil-darwin.png b/tests/e2e/create-shapes.spec.ts-snapshots/draw-and-delete-1-openpencil-darwin.png similarity index 100% rename from tests/e2e/create-shapes.spec.ts-snapshots/create-shapes-draw-and-delete-1-openpencil-darwin.png rename to tests/e2e/create-shapes.spec.ts-snapshots/draw-and-delete-1-openpencil-darwin.png diff --git a/tests/e2e/create-shapes.spec.ts-snapshots/create-shapes-draw-and-undo-1-openpencil-darwin.png b/tests/e2e/create-shapes.spec.ts-snapshots/draw-and-undo-1-openpencil-darwin.png similarity index 100% rename from tests/e2e/create-shapes.spec.ts-snapshots/create-shapes-draw-and-undo-1-openpencil-darwin.png rename to tests/e2e/create-shapes.spec.ts-snapshots/draw-and-undo-1-openpencil-darwin.png diff --git a/tests/e2e/create-shapes.spec.ts-snapshots/create-shapes-draw-ellipse-1-openpencil-darwin.png b/tests/e2e/create-shapes.spec.ts-snapshots/draw-ellipse-1-openpencil-darwin.png similarity index 100% rename from tests/e2e/create-shapes.spec.ts-snapshots/create-shapes-draw-ellipse-1-openpencil-darwin.png rename to tests/e2e/create-shapes.spec.ts-snapshots/draw-ellipse-1-openpencil-darwin.png diff --git a/tests/e2e/create-shapes.spec.ts-snapshots/create-shapes-draw-rectangle-1-openpencil-darwin.png b/tests/e2e/create-shapes.spec.ts-snapshots/draw-rectangle-1-openpencil-darwin.png similarity index 100% rename from tests/e2e/create-shapes.spec.ts-snapshots/create-shapes-draw-rectangle-1-openpencil-darwin.png rename to tests/e2e/create-shapes.spec.ts-snapshots/draw-rectangle-1-openpencil-darwin.png diff --git a/tests/e2e/create-shapes.spec.ts-snapshots/create-shapes-draw-rectangle-then-move-it-1-openpencil-darwin.png b/tests/e2e/create-shapes.spec.ts-snapshots/draw-rectangle-then-move-it-1-openpencil-darwin.png similarity index 100% rename from tests/e2e/create-shapes.spec.ts-snapshots/create-shapes-draw-rectangle-then-move-it-1-openpencil-darwin.png rename to tests/e2e/create-shapes.spec.ts-snapshots/draw-rectangle-then-move-it-1-openpencil-darwin.png diff --git a/tests/e2e/create-shapes.spec.ts-snapshots/create-shapes-empty-canvas-1-openpencil-darwin.png b/tests/e2e/create-shapes.spec.ts-snapshots/empty-canvas-1-openpencil-darwin.png similarity index 100% rename from tests/e2e/create-shapes.spec.ts-snapshots/create-shapes-empty-canvas-1-openpencil-darwin.png rename to tests/e2e/create-shapes.spec.ts-snapshots/empty-canvas-1-openpencil-darwin.png diff --git a/tests/helpers/canvas.ts b/tests/helpers/canvas.ts index de77dc2a0..c47ba88f8 100644 --- a/tests/helpers/canvas.ts +++ b/tests/helpers/canvas.ts @@ -10,7 +10,7 @@ export class CanvasHelper { } async waitForRender() { - await this.page.waitForTimeout(500) + await this.page.waitForTimeout(100) } async waitForInit() { @@ -18,6 +18,12 @@ export class CanvasHelper { await this.page.waitForTimeout(1000) } + async clearCanvas() { + await this.selectAll() + await this.pressKey('Backspace') + await this.waitForRender() + } + async screenshotCanvas() { return this.canvas.screenshot() }