import { ProgressBar } from "./ProgressBar"; describe("ProgressBar", () => { let containerElement: HTMLDivElement; let progressBar: ProgressBar; beforeEach(() => { containerElement = document.createElement("div"); progressBar = new ProgressBar(containerElement, "My message"); }); it("sets up proper HTML markup when created", () => { expect(containerElement.innerHTML).toMatchInlineSnapshot( '"My message
"' ); }); describe("progress", () => { it("updates the bar width accordingly", () => { expect(progressBar.progress).toEqual(0); expect(containerElement.innerHTML).toContain('style="width: 0%;"'); progressBar.progress = 0.5; expect(progressBar.progress).toEqual(0.5); expect(containerElement.innerHTML).toContain('style="width: 50%;"'); progressBar.progress = 1; expect(progressBar.progress).toEqual(1); expect(containerElement.innerHTML).toContain('style="width: 100%;"'); }); it("errors if an invalid progress value is provided", () => { expect(() => { // @ts-expect-error progressBar.progress = "0"; }).toThrowErrorMatchingInlineSnapshot( '"jsPsych.progressBar.progress must be a number between 0 and 1"' ); expect(() => { progressBar.progress = -0.1; }).toThrowErrorMatchingInlineSnapshot( '"jsPsych.progressBar.progress must be a number between 0 and 1"' ); expect(() => (progressBar.progress = 1.1)).toThrowErrorMatchingInlineSnapshot( '"jsPsych.progressBar.progress must be a number between 0 and 1"' ); }); it("should work when message is a function", () => { // Override default container element and progress bar containerElement = document.createElement("div"); progressBar = new ProgressBar(containerElement, (progress: number) => String(progress)); let messageSpan: HTMLSpanElement = containerElement.querySelector("span"); expect(messageSpan.innerHTML).toEqual("0"); progressBar.progress = 0.5; expect(messageSpan.innerHTML).toEqual("0.5"); }); }); });