🔧 Wait for first render using a custom event (visual regression tests)

This commit is contained in:
Belén Albeza 2025-06-09 14:51:25 +02:00
parent 59a4b51d2c
commit 1a10b7ebfd
4 changed files with 25 additions and 14 deletions

View file

Before

Width:  |  Height:  |  Size: 964 KiB

After

Width:  |  Height:  |  Size: 964 KiB

Before After
Before After

View file

@ -8,6 +8,12 @@ export class WasmWorkspacePage extends WorkspacePage {
"enable-feature-render-wasm",
"enable-render-wasm-dpr",
]);
await page.addInitScript(() => {
document.addEventListener("wasm:set-objects-finished", () => {
window.wasmSetObjectsFinished = true;
});
});
}
constructor(page) {
@ -15,10 +21,11 @@ export class WasmWorkspacePage extends WorkspacePage {
this.canvas = page.getByTestId("canvas-wasm-shapes");
}
async waitForCanvasRender() {
// FIXME: temp workaround. We will need to wait for set-objects to fully finish
async waitForFirstRender() {
await expect(this.pageName).toHaveText("Page 1");
await this.canvas.waitFor({ state: "visible" });
await this.page.waitForTimeout(3000);
await this.page.waitForFunction(() => {
return window.wasmSetObjectsFinished;
});
}
}

View file

@ -20,7 +20,7 @@ test("Renders a file with basic shapes, boards and groups", async ({
id: "53a7ff09-2228-81d3-8006-4b5eac177245",
pageId: "53a7ff09-2228-81d3-8006-4b5eac177246",
});
await workspace.waitForCanvasRender();
await workspace.waitForFirstRender();
await expect(workspace.canvas).toHaveScreenshot();
});
@ -32,11 +32,11 @@ test("Renders a file with solid, gradient and image fills", async ({
await workspace.setupEmptyFile();
await workspace.mockAsset(
"1ebcea38-f1bf-8101-8006-4c8fd68e7c84",
"render-wasm/penguins.jpg",
"render-wasm/assets/penguins.jpg",
);
await workspace.mockAsset(
"1ebcea38-f1bf-8101-8006-4c8f579da49c",
"render-wasm/penguins.jpg",
"render-wasm/assets/penguins.jpg",
);
await workspace.mockGetFile("render-wasm/get-file-shapes-fills.json");
@ -44,7 +44,7 @@ test("Renders a file with solid, gradient and image fills", async ({
id: "1ebcea38-f1bf-8101-8006-4c8ec4a9bffe",
pageId: "1ebcea38-f1bf-8101-8006-4c8ec4a9bfff",
});
await workspace.waitForCanvasRender();
await workspace.waitForFirstRender();
await expect(workspace.canvas).toHaveScreenshot();
});

View file

@ -766,13 +766,17 @@
(defn process-pending
[pending]
(when-let [pending (-> (d/index-by :key :callback pending) vals)]
(let [event (js/CustomEvent. "wasm:set-objects-finished")
pending (-> (d/index-by :key :callback pending) vals)]
(if (not-empty? pending)
(->> (rx/from pending)
(rx/mapcat (fn [callback] (callback)))
(rx/reduce conj [])
(rx/subs! (fn [_]
(clear-drawing-cache)
(request-render "set-objects"))))))
(request-render "set-objects")
(.dispatchEvent ^js js/document event))))
(.dispatchEvent ^js js/document event))))
(defn process-object
[shape]