vignette/apps/web/e2e/chunk-recovery-preview.spec.ts

36 lines
1 KiB
TypeScript

import { expect, test } from "@playwright/test";
test.skip(
process.env.E2E_PREVIEW_BUILD !== "1",
"프로덕션 build를 vite preview로 띄운 옵트인 검증이다.",
);
test("recovers a failed production lazy chunk with exactly one document reload @single-run", async ({
page,
}) => {
let loginChunkRequests = 0;
let documentRequests = 0;
page.on("request", (request) => {
if (request.isNavigationRequest()) documentRequests += 1;
});
await page.route("**/assets/Login-*.js", async (route) => {
loginChunkRequests += 1;
if (loginChunkRequests === 1) {
await route.abort("failed");
return;
}
await route.continue();
});
await page.goto("/login", { waitUntil: "domcontentloaded" });
await expect(page.getByRole("heading", { name: "로그인" })).toBeVisible({ timeout: 15_000 });
expect(loginChunkRequests).toBe(2);
expect(documentRequests).toBe(2);
await expect
.poll(() =>
page.evaluate(() => sessionStorage.getItem("vignette:chunk-recovery:/login")),
)
.toBeNull();
});