import htmlKeyboardResponse from "@jspsych/plugin-html-keyboard-response"; import { flushPromises, startTimeline } from "@jspsych/test-utils"; describe("jsPsych.run()", () => { beforeEach(() => { document.body.innerHTML = ""; }); function setReadyState(targetState: "loading" | "complete") { jest.spyOn(document, "readyState", "get").mockImplementation(() => targetState); } function getBodyHTML() { return document.body.innerHTML; } async function init() { await startTimeline([ { type: htmlKeyboardResponse, stimulus: "foo", }, ]); } // Currently not implemented – we need a way to await promises it("should delay execution until the document is ready", async () => { expect(getBodyHTML()).toBe(""); setReadyState("loading"); await init(); expect(getBodyHTML()).toBe(""); // Simulate the document getting ready setReadyState("complete"); window.dispatchEvent(new Event("load")); await flushPromises(); expect(getBodyHTML()).not.toBe(""); }); it("should execute immediately when the document is ready", async () => { // The document is ready by default in jsdom await init(); expect(getBodyHTML()).not.toBe(""); }); });