Files
wehub-resource-sync da10c3c2c3
Publish Any Commit / build (22) (push) Failing after 1s
Build Extension / build (push) Failing after 1s
chore: import upstream snapshot with attribution
2026-07-13 12:20:35 +08:00

69 lines
2.2 KiB
TypeScript

import { test, expect, type Page } from '@playwright/test';
import { gotoFixture, getRenderCount } from './helpers';
async function clickAndCountRenders(
page: Page,
selector: string,
waitMs = 1000,
): Promise<number> {
await page.evaluate(() => {
(window as any).__E2E_RENDER_COUNT__ = 0;
});
await page.click(selector);
await page.waitForTimeout(waitMs);
return getRenderCount(page);
}
test.describe('Render Outlines', () => {
test.beforeEach(async ({ page }) => {
await gotoFixture(page);
});
test('state update triggers render tracking', async ({ page }) => {
const count = await clickAndCountRenders(page, '[data-testid="increment"]');
expect(count).toBeGreaterThan(0);
});
test('rapid updates produce multiple tracked renders', async ({ page }) => {
const count = await clickAndCountRenders(page, '[data-testid="trigger-rapid"]', 2000);
expect(count).toBeGreaterThan(5);
});
test('outline canvas exists on the page', async ({ page }) => {
const hasCanvas = await page.evaluate(() => {
return document.querySelectorAll('canvas').length > 0;
});
expect(hasCanvas).toBe(true);
});
test('context change triggers render tracking', async ({ page }) => {
const count = await clickAndCountRenders(page, '[data-testid="toggle-theme"]');
expect(count).toBeGreaterThan(0);
});
test('unstable props on memo components trigger render tracking', async ({ page }) => {
const count = await clickAndCountRenders(page, '[data-testid="trigger-unstable"]');
expect(count).toBeGreaterThan(0);
});
test('render count accumulates with repeated clicks', async ({ page }) => {
await page.evaluate(() => { (window as any).__E2E_RENDER_COUNT__ = 0; });
await page.click('[data-testid="increment"]');
await page.waitForTimeout(300);
const after1 = await getRenderCount(page);
await page.click('[data-testid="increment"]');
await page.waitForTimeout(300);
const after2 = await getRenderCount(page);
await page.click('[data-testid="increment"]');
await page.waitForTimeout(300);
const after3 = await getRenderCount(page);
expect(after1).toBeGreaterThan(0);
expect(after2).toBeGreaterThan(after1);
expect(after3).toBeGreaterThan(after2);
});
});