jsPsych/packages/plugin-serial-reaction-time-mouse/src/index.spec.ts
Josh de Leeuw 522aa2cdbf
Adding a simulation mode (#2287)
Implements simulation mode in the core library, supporting API features, and plugin support in most plugins.
2021-11-23 15:12:30 -05:00

76 lines
2.0 KiB
TypeScript

import { mouseDownMouseUpTarget, simulateTimeline, startTimeline } from "@jspsych/test-utils";
import serialReactionTimeMouse from ".";
jest.useFakeTimers();
const getCellElement = (cellId: string) =>
document.querySelector(`#jspsych-serial-reaction-time-stimulus-cell-${cellId}`) as HTMLElement;
describe("serial-reaction-time-mouse plugin", () => {
test("default behavior", async () => {
const { getHTML, expectFinished } = await startTimeline([
{
type: serialReactionTimeMouse,
target: [0, 0],
},
]);
expect(getCellElement("0-0").style.backgroundColor).toBe("rgb(153, 153, 153)");
expect(getCellElement("0-1").style.backgroundColor).toBe("");
expect(getCellElement("0-2").style.backgroundColor).toBe("");
expect(getCellElement("0-3").style.backgroundColor).toBe("");
mouseDownMouseUpTarget(getCellElement("0-1"));
expect(getHTML()).not.toBe("");
mouseDownMouseUpTarget(getCellElement("0-0"));
await expectFinished();
});
});
describe("serial-reaction-time plugin simulation", () => {
test("data-only mode works", async () => {
const { expectFinished, getData } = await simulateTimeline([
{
type: serialReactionTimeMouse,
grid: [[1, 1, 1, 1]],
target: [0, 0],
},
]);
await expectFinished();
const data = getData().values()[0];
expect(data.correct).toBe(data.response[1] == data.target[1]);
expect(data.rt).toBeGreaterThan(0);
});
test("visual mode works", async () => {
const { expectFinished, expectRunning, getData } = await simulateTimeline(
[
{
type: serialReactionTimeMouse,
grid: [[1, 1, 1, 1]],
target: [0, 0],
},
],
"visual"
);
await expectRunning();
jest.runAllTimers();
await expectFinished();
const data = getData().values()[0];
expect(data.correct).toBe(data.response[1] == data.target[1]);
expect(data.rt).toBeGreaterThan(0);
});
});