fix: 修复预览与 PDF 渲染边界问题
This commit is contained in:
@@ -29,7 +29,10 @@ function payload(): PdfRenderPayload {
|
||||
};
|
||||
}
|
||||
|
||||
function fakeBrowser(options: { hangOnGoto?: boolean } = {}) {
|
||||
function fakeBrowser(
|
||||
options: { hangOnGoto?: boolean; hangOnNewContext?: boolean } = {}
|
||||
) {
|
||||
let releaseNewContext: (() => void) | undefined;
|
||||
const route = vi.fn();
|
||||
const closeContext = vi.fn(async () => undefined);
|
||||
const closeBrowser = vi.fn(async () => undefined);
|
||||
@@ -65,7 +68,14 @@ function fakeBrowser(options: { hangOnGoto?: boolean } = {}) {
|
||||
close: closeContext
|
||||
};
|
||||
const browser = {
|
||||
newContext: vi.fn(async () => context),
|
||||
newContext: options.hangOnNewContext
|
||||
? vi.fn(
|
||||
() =>
|
||||
new Promise<typeof context>((resolve) => {
|
||||
releaseNewContext = () => resolve(context);
|
||||
})
|
||||
)
|
||||
: vi.fn(async () => context),
|
||||
close: closeBrowser,
|
||||
on: vi.fn()
|
||||
} as unknown as Browser;
|
||||
@@ -77,6 +87,9 @@ function fakeBrowser(options: { hangOnGoto?: boolean } = {}) {
|
||||
context,
|
||||
page,
|
||||
pdfBuffer,
|
||||
releaseNewContext() {
|
||||
releaseNewContext?.();
|
||||
},
|
||||
route
|
||||
};
|
||||
}
|
||||
@@ -240,4 +253,39 @@ describe("Playwright PDF 生成器", () => {
|
||||
expect(fake.closeContext).toHaveBeenCalledTimes(1);
|
||||
await generator.close();
|
||||
});
|
||||
|
||||
it("浏览器启动阶段也受生成超时限制", async () => {
|
||||
const fake = fakeBrowser();
|
||||
let releaseBrowser: (() => void) | undefined;
|
||||
const generator = new PlaywrightPdfGenerator({
|
||||
launchBrowser: () =>
|
||||
new Promise<Browser>((resolve) => {
|
||||
releaseBrowser = () => resolve(fake.browser);
|
||||
}),
|
||||
timeoutMs: 10
|
||||
});
|
||||
|
||||
await expect(generator.generate(payload())).rejects.toBeInstanceOf(
|
||||
PdfRenderTimeoutError
|
||||
);
|
||||
releaseBrowser?.();
|
||||
await new Promise((resolve) => setTimeout(resolve, 0));
|
||||
await generator.close();
|
||||
});
|
||||
|
||||
it("上下文创建阶段也受生成超时限制并清理迟到上下文", async () => {
|
||||
const fake = fakeBrowser({ hangOnNewContext: true });
|
||||
const generator = new PlaywrightPdfGenerator({
|
||||
launchBrowser: async () => fake.browser,
|
||||
timeoutMs: 10
|
||||
});
|
||||
|
||||
await expect(generator.generate(payload())).rejects.toBeInstanceOf(
|
||||
PdfRenderTimeoutError
|
||||
);
|
||||
fake.releaseNewContext();
|
||||
await new Promise((resolve) => setTimeout(resolve, 0));
|
||||
expect(fake.closeContext).toHaveBeenCalledTimes(1);
|
||||
await generator.close();
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user