diff --git a/packages/jspsych/tests/citations/citations.test.ts b/packages/jspsych/tests/citations/citations.test.ts index 63202f9d89..df035a4072 100644 --- a/packages/jspsych/tests/citations/citations.test.ts +++ b/packages/jspsych/tests/citations/citations.test.ts @@ -1,4 +1,4 @@ -import { initJsPsych } from "../../dist/index.js"; +//import { JsPsych } from "../../src/JsPsych"; import { TestExtension } from "../extensions/TestExtension"; import TestPlugin from "../TestPlugin"; @@ -10,78 +10,94 @@ const testPluginApaCitation = "Test plugin APA citation"; const testPluginBibtexCitation = "Test plugin BibTeX citation"; const testExtensionApaCitation = "Test extension APA citation"; -let jsPsych; -beforeEach(() => { - jsPsych = initJsPsych(); -}); +let consoleLogSpy: jest.SpyInstance; +let consoleWarnSpy: jest.SpyInstance; -describe("citing not using an array", () => { - test("citing nothing", () => { - const citation = jsPsych.getCitations(); - console.log(citation); - expect(citation).toMatch(jsPsychApaCitation); - }); - test("citing without input and with valid format", () => { - jsPsych.getCitations(null, "apa"); - expect(consoleLogSpy.mock.calls).toHaveLength(1); - expect(consoleLogSpy.mock.calls[0][0]).toBe(jsPsychApaCitation); - }); - test("citing without input and with invalid format", () => { - expect(() => jspsych.getCitations(null, "dummyTex")).toThrow("Unsupported citation format"); - }); -}); +let JsPsych; -describe("citing using an array in different formats", () => { - test("citing empty array with APA format", () => { - jspsych.getCitations([], "apa"); - expect(consoleLogSpy.mock.calls).toHaveLength(1); - expect(consoleLogSpy.mock.calls[0][0]).toBe(jsPsychApaCitation); - }); - test("citing empty array with BibTeX format", () => { - jspsych.getCitations([], "bibtex"); - expect(consoleLogSpy.mock.calls).toHaveLength(1); - expect(consoleLogSpy.mock.calls[0][0]).toBe(jsPsychBibtexCitation); - }); - test("citing empty array without format", () => { - jspsych.getCitations([]); - expect(consoleLogSpy.mock.calls).toHaveLength(1); - expect(consoleLogSpy.mock.calls[0][0]).toBe(jsPsychApaCitation); - }); - test("citing one plugin with valid format in all caps", () => { - const citation = jsPsych.getCitations([TestPlugin], "APA"); - expect(citation).toBe(jsPsychApaCitation + "\n" + testPluginApaCitation + "\n"); +/** + * These tests are skipped if the built version of JsPsych is not found. + * This is because the citation functionality is only available in the built version + * due to code injections that run during the build. + */ + +try { + // Try to import built version + JsPsych = require("../../dist/index").JsPsych; + let jspsych: typeof JsPsych; + + beforeEach(() => { + jspsych = new JsPsych(); + consoleLogSpy = jest.spyOn(console, "log").mockImplementation(); + consoleWarnSpy = jest.spyOn(console, "warn").mockImplementation(); }); - test("citing with unsupported format", () => { - expect(() => jspsych.getCitations([TestPlugin], "DummyTex")).toThrow( - "Unsupported citation format" - ); + + afterEach(() => { + jest.restoreAllMocks(); }); -}); -describe("citing mix of valid plugins/extensions", () => { - test("citing a plugin", () => { - jspsych.getCitations([TestPlugin]); - expect(consoleLogSpy.mock.calls).toHaveLength(2); - // expect(consoleLogSpy.mock.calls[0][0]).toBe(jsPsychApaCitation); - expect(consoleLogSpy.mock.calls[1][0]).toBe(testPluginApaCitation); + describe("citing not using an array", () => { + test("citing nothing", () => { + expect(() => jspsych.getCitations(null)).toThrow("Expected array of plugins/extensions"); + }); + test("citing without input and with invalid format", () => { + expect(() => jspsych.getCitations(null, "apa")).toThrow( + "Expected array of plugins/extensions" + ); + }); }); - test("citing a plugin in BibTeX", () => { - jspsych.getCitations([TestPlugin], "bibtex"); - expect(consoleLogSpy.mock.calls).toHaveLength(2); - expect(consoleLogSpy.mock.calls[0][0]).toBe(jsPsychBibtexCitation); - expect(consoleLogSpy.mock.calls[1][0]).toBe(testPluginBibtexCitation); + + describe("citing using an array in different formats", () => { + test("citing empty array with APA format", () => { + jspsych.getCitations([], "apa"); + expect(consoleWarnSpy.mock.calls[0][0]).toBe("No plugins/extensions provided"); + }); + test("citing empty array with BibTeX format", () => { + jspsych.getCitations([], "bibtex"); + expect(consoleWarnSpy.mock.calls[0][0]).toBe("No plugins/extensions provided"); + }); + test("citing empty array without format", () => { + jspsych.getCitations([]); + expect(consoleWarnSpy.mock.calls[0][0]).toBe("No plugins/extensions provided"); + }); + test("citing one plugin with valid format in all caps", () => { + jspsych.getCitations([TestPlugin], "APA"); + expect(consoleLogSpy.mock.calls[0][0]).toBe(testPluginApaCitation); + }); + test("citing with unsupported format", () => { + expect(() => jspsych.getCitations([TestPlugin], "DummyTex")).toThrow( + "Unsupported citation format" + ); + }); }); - test("citing multiple of the same plugins", () => { - jspsych.getCitations([TestPlugin, TestPlugin]); - expect(consoleLogSpy.mock.calls).toHaveLength(2); - expect(consoleLogSpy.mock.calls[0][0]).toBe(jsPsychApaCitation); - expect(consoleLogSpy.mock.calls[1][0]).toBe(testPluginApaCitation); + + describe("citing mix of valid plugins/extensions", () => { + test("citing a plugin", () => { + jspsych.getCitations([TestPlugin]); + expect(consoleLogSpy.mock.calls[0][0]).toBe(testPluginApaCitation); + }); + test("citing a plugin in BibTeX", () => { + jspsych.getCitations([TestPlugin], "bibtex"); + expect(consoleLogSpy.mock.calls[0][0]).toBe(testPluginBibtexCitation); + }); + test("citing multiple plugins", () => { + jspsych.getCitations([TestPlugin, TestPlugin]); + expect(consoleLogSpy.mock.calls).toHaveLength(2); + expect(consoleLogSpy.mock.calls[0][0]).toBe(testPluginApaCitation); + expect(consoleLogSpy.mock.calls[1][0]).toBe(testPluginApaCitation); + }); + test("citing mix of plugins and extensions", () => { + jspsych.getCitations([TestPlugin, TestExtension]); + expect(consoleLogSpy.mock.calls).toHaveLength(2); + expect(consoleLogSpy.mock.calls[0][0]).toBe(testPluginApaCitation); + expect(consoleLogSpy.mock.calls[1][0]).toBe(testExtensionApaCitation); + }); }); - test("citing mix of plugins and extensions", () => { - jspsych.getCitations([TestPlugin, TestExtension]); - expect(consoleLogSpy.mock.calls).toHaveLength(3); - expect(consoleLogSpy.mock.calls[0][0]).toBe(jsPsychApaCitation); - expect(consoleLogSpy.mock.calls[1][0]).toBe(testPluginApaCitation); - expect(consoleLogSpy.mock.calls[2][0]).toBe(testExtensionApaCitation); +} catch (e) { + // Fall back to development version if built version not found + describe("skipping citation tests because of missing built version", () => { + test.skip("skip", () => { + expect(true).toBe(true); + }); }); -}); +}