From ad1d854f43c1e25ba988a3aa2a23a8ab22be3535 Mon Sep 17 00:00:00 2001 From: jade <101148768+jadeddelta@users.noreply.github.com> Date: Fri, 10 Jan 2025 01:02:58 -0700 Subject: [PATCH] rework tests to use `displayElement`, remove DOM clearing per test --- .changeset/tender-ads-prove.md | 5 + packages/config/jest.cjs | 3 +- packages/config/jest.setup.js | 3 - .../core/functions-as-parameters.test.ts | 26 ++--- .../jspsych/tests/core/progressbar.test.ts | 37 ++++--- .../tests/data/data-csv-conversion.test.ts | 16 +-- .../tests/data/data-json-conversion.test.ts | 16 +-- .../tests/data/trialparameters.test.ts | 8 +- .../src/index.spec.ts | 4 +- packages/plugin-cloze/src/index.spec.ts | 101 +++++++++--------- packages/plugin-fullscreen/src/index.spec.ts | 8 +- .../src/index.spec.ts | 4 +- .../src/index.spec.ts | 4 +- .../src/index.spec.ts | 4 +- .../src/index.spec.ts | 11 +- .../src/index.spec.ts | 24 ++--- packages/plugin-maxdiff/src/index.spec.ts | 8 +- .../src/index.spec.ts | 21 ++-- .../src/index.spec.ts | 44 ++++---- .../plugin-survey-html-form/src/index.spec.ts | 2 +- .../plugin-survey-likert/src/index.spec.ts | 21 ++-- .../src/index.spec.ts | 30 +++--- .../src/index.spec.ts | 22 ++-- packages/plugin-survey-text/src/index.spec.ts | 40 +++---- .../src/index.spec.ts | 6 +- 25 files changed, 251 insertions(+), 217 deletions(-) create mode 100644 .changeset/tender-ads-prove.md delete mode 100644 packages/config/jest.setup.js diff --git a/.changeset/tender-ads-prove.md b/.changeset/tender-ads-prove.md new file mode 100644 index 00000000..a0548b90 --- /dev/null +++ b/.changeset/tender-ads-prove.md @@ -0,0 +1,5 @@ +--- +"@jspsych/config": patch +--- + +remove DOM clearing after each individual test, fixes issues with testing in other repositories diff --git a/packages/config/jest.cjs b/packages/config/jest.cjs index 43ea3630..c4f24a37 100644 --- a/packages/config/jest.cjs +++ b/packages/config/jest.cjs @@ -18,7 +18,6 @@ module.exports.makePackageConfig = (dirname) => { displayName: { name: packageBaseName, color: packageBaseName === "jspsych" ? "white" : "cyanBright", - }, - setupFilesAfterEnv: ["../config/jest.setup.js"], + } }; }; diff --git a/packages/config/jest.setup.js b/packages/config/jest.setup.js deleted file mode 100644 index 4c6b91b3..00000000 --- a/packages/config/jest.setup.js +++ /dev/null @@ -1,3 +0,0 @@ -global.afterEach(() => { - document.body.innerHTML = ''; -}); \ No newline at end of file diff --git a/packages/jspsych/tests/core/functions-as-parameters.test.ts b/packages/jspsych/tests/core/functions-as-parameters.test.ts index 47286645..b6ba66cf 100644 --- a/packages/jspsych/tests/core/functions-as-parameters.test.ts +++ b/packages/jspsych/tests/core/functions-as-parameters.test.ts @@ -21,7 +21,7 @@ describe("standard use of function as parameter", () => { test("parameters can be protected from early evaluation using ParameterType.FUNCTION", async () => { const mock = jest.fn(); - await startTimeline([ + const { displayElement } = await startTimeline([ { type: cloze, text: "%foo%", @@ -31,7 +31,7 @@ describe("standard use of function as parameter", () => { ]); expect(mock).not.toHaveBeenCalled(); - await clickTarget(document.querySelector("#finish_cloze_button")); + await clickTarget(displayElement.querySelector("#finish_cloze_button")); expect(mock).toHaveBeenCalledTimes(1); }); }); @@ -76,12 +76,12 @@ describe("nested parameters as functions", () => { ]); expect(displayElement.querySelectorAll("p.jspsych-survey-text").length).toBe(2); - await clickTarget(document.querySelector("#jspsych-survey-text-next")); + await clickTarget(displayElement.querySelector("#jspsych-survey-text-next")); await expectFinished(); }); test("nested parameter can be a function", async () => { - const { expectFinished } = await startTimeline([ + const { expectFinished, displayElement } = await startTimeline([ { type: surveyText, questions: [ @@ -95,18 +95,18 @@ describe("nested parameters as functions", () => { }, ]); - expect(document.querySelector("#jspsych-survey-text-0 p.jspsych-survey-text").innerHTML).toBe( + expect(displayElement.querySelector("#jspsych-survey-text-0 p.jspsych-survey-text").innerHTML).toBe( "foo" ); - expect(document.querySelector("#jspsych-survey-text-1 p.jspsych-survey-text").innerHTML).toBe( + expect(displayElement.querySelector("#jspsych-survey-text-1 p.jspsych-survey-text").innerHTML).toBe( "bar" ); - await clickTarget(document.querySelector("#jspsych-survey-text-next")); + await clickTarget(displayElement.querySelector("#jspsych-survey-text-next")); await expectFinished(); }); test("multiple nested parameters can be functions", async () => { - const { expectFinished } = await startTimeline([ + const { expectFinished, displayElement } = await startTimeline([ { type: surveyMultiChoice, questions: [ @@ -128,11 +128,11 @@ describe("nested parameters as functions", () => { }, ]); - expect(document.querySelector("#jspsych-survey-multi-choice-0").innerHTML).toMatch("foo"); - expect(document.querySelector("#jspsych-survey-multi-choice-0").innerHTML).toMatch("buzz"); - expect(document.querySelector("#jspsych-survey-multi-choice-1").innerHTML).toMatch("bar"); - expect(document.querySelector("#jspsych-survey-multi-choice-1").innerHTML).toMatch("one"); - await clickTarget(document.querySelector("#jspsych-survey-multi-choice-next")); + expect(displayElement.querySelector("#jspsych-survey-multi-choice-0").innerHTML).toMatch("foo"); + expect(displayElement.querySelector("#jspsych-survey-multi-choice-0").innerHTML).toMatch("buzz"); + expect(displayElement.querySelector("#jspsych-survey-multi-choice-1").innerHTML).toMatch("bar"); + expect(displayElement.querySelector("#jspsych-survey-multi-choice-1").innerHTML).toMatch("one"); + await clickTarget(displayElement.querySelector("#jspsych-survey-multi-choice-next")); await expectFinished(); }); diff --git a/packages/jspsych/tests/core/progressbar.test.ts b/packages/jspsych/tests/core/progressbar.test.ts index 39d1c78a..b83d96f9 100644 --- a/packages/jspsych/tests/core/progressbar.test.ts +++ b/packages/jspsych/tests/core/progressbar.test.ts @@ -1,23 +1,29 @@ import htmlKeyboardResponse from "@jspsych/plugin-html-keyboard-response"; import { pressKey, startTimeline } from "@jspsych/test-utils"; -import { initJsPsych } from "../../src"; +import { initJsPsych, JsPsych } from "../../src"; + +// progress bar lives in the container element +const getContainer = (jsPsych: JsPsych) => { + return jsPsych.getDisplayContainerElement(); +} describe("automatic progress bar", () => { test("progress bar does not display by default", async () => { - await startTimeline([ + const { jsPsych } = await startTimeline([ { type: htmlKeyboardResponse, stimulus: "foo", }, ]); - expect(document.querySelector("#jspsych-progressbar-container")).toBeNull(); + const displayContainer = getContainer(jsPsych); + expect(displayContainer.querySelector("#jspsych-progressbar-container")).toBeNull(); await pressKey("a"); }); test("progress bar displays when show_progress_bar is true", async () => { - await startTimeline( + const { jsPsych } = await startTimeline( [ { type: htmlKeyboardResponse, @@ -27,7 +33,8 @@ describe("automatic progress bar", () => { { show_progress_bar: true } ); - expect(document.querySelector("#jspsych-progressbar-container").innerHTML).toMatch( + const displayContainer = getContainer(jsPsych); + expect(displayContainer.querySelector("#jspsych-progressbar-container").innerHTML).toMatch( 'Completion Progress
This is a prompt
"); - await clickTarget(document.querySelector("#jspsych-image-slider-response-next")); + await clickTarget(displayElement.querySelector("#jspsych-image-slider-response-next")); await expectFinished(); }); @@ -123,7 +123,7 @@ describe("image-slider-response", () => { jest.advanceTimersByTime(500); expect(stimulusElement.style.visibility).toContain("hidden"); - await clickTarget(document.querySelector("#jspsych-image-slider-response-next")); + await clickTarget(displayElement.querySelector("#jspsych-image-slider-response-next")); await expectFinished(); }); @@ -148,7 +148,7 @@ describe("image-slider-response", () => { }); test("should end trial when button is clicked", async () => { - const { getHTML, expectFinished } = await startTimeline([ + const { getHTML, expectFinished, displayElement } = await startTimeline([ { type: imageSliderResponse, stimulus: "../media/blue.png", @@ -163,7 +163,7 @@ describe("image-slider-response", () => { '