mirror of
https://github.com/maputnik/editor.git
synced 2026-07-09 07:27:35 +00:00
c3dd253737
Replace Cypress with Playwright for the end-to-end suite and drop
@shellygo/cypress-test-utils in favour of a hand-written MaputnikDriver
page object that keeps the fluent then(...).shouldX() assertion style
(now async). The InputAutocomplete component test moves to Vitest browser
mode using the Playwright provider.
- e2e/maputnik-driver.ts: driver + MaputnikAssertable over Playwright
- e2e/{fixtures,coverage,global-setup,global-teardown}.ts: test fixture,
istanbul coverage collection, and nyc report generation
- playwright.config.ts / vitest.config.ts
- Code coverage preserved: dev server is istanbul-instrumented, per-test
window.__coverage__ is merged via nyc into coverage/coverage-final.json
- CI: Cypress jobs replaced with Playwright; docker e2e runs against the
container via E2E_NO_WEBSERVER
- Remove Cypress deps, config and support files; update docs and .nycrc
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
31 lines
1.1 KiB
TypeScript
31 lines
1.1 KiB
TypeScript
import fs from "node:fs";
|
|
import path from "node:path";
|
|
import type { Page } from "@playwright/test";
|
|
|
|
const OUTPUT_DIR = path.resolve(process.cwd(), ".nyc_output");
|
|
|
|
/**
|
|
* Reads the istanbul coverage object (injected by vite-plugin-istanbul) from the
|
|
* given page. Returns `null` when the page has not been instrumented.
|
|
*/
|
|
export async function readCoverage(page: Page): Promise<unknown | null> {
|
|
try {
|
|
return await page.evaluate(() => (window as unknown as { __coverage__?: unknown }).__coverage__ ?? null);
|
|
} catch {
|
|
// Page might be navigating/closed.
|
|
return null;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Persists a coverage chunk to `.nyc_output` so that `nyc report` can merge it.
|
|
* istanbul-lib-coverage (used by nyc) sums the hit counts across every file it
|
|
* finds, so writing one file per chunk is enough to accumulate coverage across
|
|
* navigations and tests.
|
|
*/
|
|
export function writeCoverage(coverage: unknown, id: string): void {
|
|
if (!coverage) return;
|
|
fs.mkdirSync(OUTPUT_DIR, { recursive: true });
|
|
fs.writeFileSync(path.join(OUTPUT_DIR, `playwright-${id}.json`), JSON.stringify(coverage));
|
|
}
|