From ca0c427e8ffdddea34aed0f45c5dc560e8fb60a9 Mon Sep 17 00:00:00 2001 From: Becky Gilbert Date: Fri, 12 Feb 2021 15:59:35 -0800 Subject: [PATCH] add a few more JSON and CSV conversion tests with plugins that uses objects and arrays in the data #670 --- .../jsPsych.data/data-csv-conversion.test.js | 75 ++++++++++- .../jsPsych.data/data-json-conversion.test.js | 118 +++++++++++++++++- 2 files changed, 190 insertions(+), 3 deletions(-) diff --git a/tests/jsPsych.data/data-csv-conversion.test.js b/tests/jsPsych.data/data-csv-conversion.test.js index 11b5cb37..fc46de80 100644 --- a/tests/jsPsych.data/data-csv-conversion.test.js +++ b/tests/jsPsych.data/data-csv-conversion.test.js @@ -1,6 +1,8 @@ const root = '../../'; const utils = require('../testing-utils.js'); +jest.useFakeTimers(); + describe('data conversion to csv', function(){ beforeEach(function(){ @@ -8,7 +10,7 @@ describe('data conversion to csv', function(){ require(root + 'plugins/jspsych-survey-text.js'); }); - test('survey-text data is correctly converted', function(){ + test('survey-text data response object is correctly converted', function(){ var trial = { type: 'survey-text', questions: [ @@ -30,4 +32,75 @@ describe('data conversion to csv', function(){ expect(csv_data).toBe('"responses","trial_index"\r\n"{""Q0"":""Response 1"",""Q1"":""Response 2""}","0"\r\n'); }) + test('same-different-html stimulus array is correctly converted', function(){ + require(root + 'plugins/jspsych-same-different-html.js'); + + var trial = { + type: 'same-different-html', + stimuli: ['

Climbing

', '

Walking

'], + answer: 'different', + gap_duration: 0, + first_stim_duration: null + } + + var timeline = [trial]; + + jsPsych.init({timeline: timeline}); + + expect(jsPsych.getDisplayElement().innerHTML).toMatch('

Climbing

'); + utils.pressKey('q'); + jest.runAllTimers(); + expect(jsPsych.getDisplayElement().innerHTML).toMatch('

Walking

'); + utils.pressKey('q'); + expect(jsPsych.getDisplayElement().innerHTML).toBe(''); + + var csv_data = jsPsych.data.get().ignore(['rt','internal_node_id','time_elapsed','trial_type','rt_stim1','key_press_stim1']).csv(); + expect(csv_data).toBe('"answer","correct","stimulus","key_press","trial_index"\r\n"different","false","[""

Climbing

"",""

Walking

""]","q","0"\r\n') + }) + + test('video-button-response stimulus array is correctly converted', function(){ + require(root + 'plugins/jspsych-video-button-response.js'); + + var trial = { + type: 'video-button-response', + stimulus: ['vid/video.mp4'], + choices: ['button'] + } + + var timeline = [trial]; + + jsPsych.init({timeline: timeline}); + + expect(jsPsych.getDisplayElement().innerHTML).toMatch('video.mp4'); + utils.clickTarget(document.querySelector('#jspsych-video-button-response-button-0')); + expect(jsPsych.getDisplayElement().innerHTML).toBe(''); + + var csv_data = jsPsych.data.get().ignore(['rt','internal_node_id','time_elapsed','trial_type']).csv(); + expect(csv_data).toBe('"stimulus","button_pressed","trial_index"\r\n"[""vid/video.mp4""]","0","0"\r\n'); + }) + + test('survey-multi-select response array is correctly converted', function(){ + require(root + 'plugins/jspsych-survey-multi-select.js'); + + var trial = { + type: 'survey-multi-select', + questions: [ + {prompt: "foo", options: ["fuzz", "bizz", "bar"], name: 'q'} + ] + }; + + var timeline = [trial]; + + jsPsych.init({timeline: timeline}); + + expect(jsPsych.getDisplayElement().innerHTML).toMatch('foo'); + utils.clickTarget(document.querySelector('#jspsych-survey-multi-select-response-0-0')); + utils.clickTarget(document.querySelector('#jspsych-survey-multi-select-response-0-1')); + utils.clickTarget(document.querySelector('#jspsych-survey-multi-select-next')); + expect(jsPsych.getDisplayElement().innerHTML).toBe(''); + + var csv_data = jsPsych.data.get().ignore(['rt','internal_node_id','time_elapsed','trial_type','question_order']).csv(); + expect(csv_data).toBe('"responses","trial_index"\r\n"{""q"":[""fuzz"",""bizz""]}","0"\r\n') + }) + }); \ No newline at end of file diff --git a/tests/jsPsych.data/data-json-conversion.test.js b/tests/jsPsych.data/data-json-conversion.test.js index 03a999fc..6915d0a9 100644 --- a/tests/jsPsych.data/data-json-conversion.test.js +++ b/tests/jsPsych.data/data-json-conversion.test.js @@ -1,14 +1,17 @@ const root = '../../'; const utils = require('../testing-utils.js'); +jest.useFakeTimers(); + describe('data conversion to json', function(){ beforeEach(function(){ require(root + 'jspsych.js'); - require(root + 'plugins/jspsych-survey-text.js'); }); - test('survey-text data is correctly converted', function(){ + test('survey-text data response object is correctly converted', function(){ + require(root + 'plugins/jspsych-survey-text.js'); + var trial = { type: 'survey-text', questions: [ @@ -30,4 +33,115 @@ describe('data conversion to json', function(){ expect(json_data).toBe(JSON.stringify([{responses: {Q0: "Response 1", Q1: "Response 2"}, trial_index: 0}])); }) + test('same-different-html stimulus array is correctly converted', function(){ + require(root + 'plugins/jspsych-same-different-html.js'); + + var trial = { + type: 'same-different-html', + stimuli: ['

Climbing

', '

Walking

'], + answer: 'different', + gap_duration: 0, + first_stim_duration: null + } + + var timeline = [trial]; + + jsPsych.init({timeline: timeline}); + + expect(jsPsych.getDisplayElement().innerHTML).toMatch('

Climbing

'); + utils.pressKey('q'); + jest.runAllTimers(); + expect(jsPsych.getDisplayElement().innerHTML).toMatch('

Walking

'); + utils.pressKey('q'); + expect(jsPsych.getDisplayElement().innerHTML).toBe(''); + + var json_data = jsPsych.data.get().ignore(['rt','internal_node_id','time_elapsed','trial_type','rt_stim1','key_press_stim1']).json(); + expect(json_data).toBe(JSON.stringify([{answer: 'different', correct: false, stimulus: ['

Climbing

','

Walking

'], key_press: 'q', trial_index: 0}])); + }) + + test('video-button-response stimulus array is correctly converted', function(){ + require(root + 'plugins/jspsych-video-button-response.js'); + + var trial = { + type: 'video-button-response', + stimulus: ['vid/video.mp4'], + choices: ['button'] + } + + var timeline = [trial]; + + jsPsych.init({timeline: timeline}); + + expect(jsPsych.getDisplayElement().innerHTML).toMatch('video.mp4'); + utils.clickTarget(document.querySelector('#jspsych-video-button-response-button-0')); + expect(jsPsych.getDisplayElement().innerHTML).toBe(''); + + var json_data = jsPsych.data.get().ignore(['rt','internal_node_id','time_elapsed','trial_type']).json(); + expect(json_data).toBe(JSON.stringify([{stimulus: ['vid/video.mp4'], button_pressed: 0, trial_index: 0}])); + }) + + test('survey-multi-select response array is correctly converted', function(){ + require(root + 'plugins/jspsych-survey-multi-select.js'); + + var trial = { + type: 'survey-multi-select', + questions: [ + {prompt: "foo", options: ["fuzz", "bizz", "bar"], name: 'q'} + ] + }; + + var timeline = [trial]; + + jsPsych.init({timeline: timeline}); + + expect(jsPsych.getDisplayElement().innerHTML).toMatch('foo'); + utils.clickTarget(document.querySelector('#jspsych-survey-multi-select-response-0-0')); + utils.clickTarget(document.querySelector('#jspsych-survey-multi-select-response-0-1')); + utils.clickTarget(document.querySelector('#jspsych-survey-multi-select-next')); + expect(jsPsych.getDisplayElement().innerHTML).toBe(''); + + var json_data = jsPsych.data.get().ignore(['rt','internal_node_id','time_elapsed','trial_type','question_order']).json(); + var data_js = [ + { + responses: { + q: ["fuzz","bizz"], + }, + trial_index: 0 + } + ]; + expect(json_data).toBe(JSON.stringify(data_js)); + }) + + test('jsPsych json function is the same as JSON.stringify', function(){ + require(root + 'plugins/jspsych-survey-multi-select.js'); + + var trial = { + type: 'survey-multi-select', + questions: [ + {prompt: "foo", options: ["fuzz", "bizz", "bar"], name: 'q'} + ] + }; + + var timeline = [trial]; + + jsPsych.init({timeline: timeline}); + + expect(jsPsych.getDisplayElement().innerHTML).toMatch('foo'); + utils.clickTarget(document.querySelector('#jspsych-survey-multi-select-response-0-0')); + utils.clickTarget(document.querySelector('#jspsych-survey-multi-select-response-0-1')); + utils.clickTarget(document.querySelector('#jspsych-survey-multi-select-next')); + expect(jsPsych.getDisplayElement().innerHTML).toBe(''); + + var json_data = jsPsych.data.get().ignore(['rt','internal_node_id','time_elapsed','trial_type','question_order']).json(); + var data_js = [ + { + responses: { + q: ["fuzz","bizz"], + }, + trial_index: 0 + } + ]; + expect(json_data).toBe(JSON.stringify(data_js)); + }) + }); \ No newline at end of file