jspsych 6.2.0 → 7.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (360) hide show
  1. package/README.md +43 -29
  2. package/css/jspsych.css +39 -39
  3. package/dist/JsPsych.d.ts +112 -0
  4. package/dist/TimelineNode.d.ts +34 -0
  5. package/dist/index.browser.js +3164 -0
  6. package/dist/index.browser.js.map +1 -0
  7. package/dist/index.browser.min.js +2 -0
  8. package/dist/index.browser.min.js.map +1 -0
  9. package/dist/index.cjs +3158 -0
  10. package/dist/index.cjs.map +1 -0
  11. package/dist/index.d.ts +11 -0
  12. package/dist/index.js +3152 -0
  13. package/dist/index.js.map +1 -0
  14. package/dist/migration.d.ts +3 -0
  15. package/dist/modules/data/DataCollection.d.ts +45 -0
  16. package/dist/modules/data/DataColumn.d.ts +15 -0
  17. package/dist/modules/data/index.d.ts +25 -0
  18. package/dist/modules/data/utils.d.ts +3 -0
  19. package/dist/modules/extensions.d.ts +22 -0
  20. package/dist/modules/plugin-api/HardwareAPI.d.ts +15 -0
  21. package/dist/modules/plugin-api/KeyboardListenerAPI.d.ts +34 -0
  22. package/dist/modules/plugin-api/MediaAPI.d.ts +27 -0
  23. package/dist/modules/plugin-api/SimulationAPI.d.ts +41 -0
  24. package/dist/modules/plugin-api/TimeoutAPI.d.ts +5 -0
  25. package/dist/modules/plugin-api/index.d.ts +8 -0
  26. package/dist/modules/plugins.d.ts +129 -0
  27. package/dist/modules/randomization.d.ts +35 -0
  28. package/dist/modules/turk.d.ts +40 -0
  29. package/dist/modules/utils.d.ts +7 -0
  30. package/package.json +32 -15
  31. package/src/JsPsych.ts +884 -0
  32. package/src/TimelineNode.ts +536 -0
  33. package/src/index.ts +71 -0
  34. package/src/migration.ts +37 -0
  35. package/src/modules/data/DataCollection.ts +198 -0
  36. package/src/modules/data/DataColumn.ts +86 -0
  37. package/src/modules/data/index.ts +174 -0
  38. package/src/modules/data/utils.ts +75 -0
  39. package/src/modules/extensions.ts +23 -0
  40. package/src/modules/plugin-api/HardwareAPI.ts +32 -0
  41. package/src/modules/plugin-api/KeyboardListenerAPI.ts +165 -0
  42. package/src/modules/plugin-api/MediaAPI.ts +337 -0
  43. package/src/modules/plugin-api/SimulationAPI.ts +181 -0
  44. package/src/modules/plugin-api/TimeoutAPI.ts +16 -0
  45. package/src/modules/plugin-api/index.ts +28 -0
  46. package/src/modules/plugins.ts +158 -0
  47. package/src/modules/randomization.ts +327 -0
  48. package/src/modules/turk.ts +99 -0
  49. package/src/modules/utils.ts +30 -0
  50. package/.github/workflows/jest.yml +0 -20
  51. package/code-of-conduct.md +0 -56
  52. package/contributors.md +0 -61
  53. package/docs/CNAME +0 -1
  54. package/docs/about/about.md +0 -18
  55. package/docs/about/contributing.md +0 -43
  56. package/docs/about/license.md +0 -25
  57. package/docs/about/support.md +0 -7
  58. package/docs/core_library/jspsych-core.md +0 -661
  59. package/docs/core_library/jspsych-data.md +0 -589
  60. package/docs/core_library/jspsych-pluginAPI.md +0 -510
  61. package/docs/core_library/jspsych-randomization.md +0 -397
  62. package/docs/core_library/jspsych-turk.md +0 -102
  63. package/docs/img/blue.png +0 -0
  64. package/docs/img/folder-setup.png +0 -0
  65. package/docs/img/folder-with-html.png +0 -0
  66. package/docs/img/githubreleases.jpg +0 -0
  67. package/docs/img/jspsych-favicon.png +0 -0
  68. package/docs/img/jspsych-logo-no-text-mono.svg +0 -493
  69. package/docs/img/jspsych-logo.jpg +0 -0
  70. package/docs/img/orange.png +0 -0
  71. package/docs/img/palmer_stim.png +0 -0
  72. package/docs/img/progress_bar.png +0 -0
  73. package/docs/img/visual_search_example.jpg +0 -0
  74. package/docs/index.md +0 -9
  75. package/docs/overview/browser-device-support.md +0 -35
  76. package/docs/overview/callbacks.md +0 -140
  77. package/docs/overview/data.md +0 -281
  78. package/docs/overview/exclude-browser.md +0 -32
  79. package/docs/overview/experiment-options.md +0 -121
  80. package/docs/overview/fullscreen.md +0 -36
  81. package/docs/overview/media-preloading.md +0 -91
  82. package/docs/overview/mturk.md +0 -77
  83. package/docs/overview/progress-bar.md +0 -110
  84. package/docs/overview/record-browser-interactions.md +0 -23
  85. package/docs/overview/running-experiments.md +0 -95
  86. package/docs/overview/timeline.md +0 -387
  87. package/docs/overview/trial.md +0 -142
  88. package/docs/plugins/creating-a-plugin.md +0 -79
  89. package/docs/plugins/jspsych-animation.md +0 -40
  90. package/docs/plugins/jspsych-audio-button-response.md +0 -60
  91. package/docs/plugins/jspsych-audio-keyboard-response.md +0 -58
  92. package/docs/plugins/jspsych-audio-slider-response.md +0 -53
  93. package/docs/plugins/jspsych-call-function.md +0 -81
  94. package/docs/plugins/jspsych-canvas-button-response.md +0 -66
  95. package/docs/plugins/jspsych-canvas-keyboard-response.md +0 -68
  96. package/docs/plugins/jspsych-canvas-slider-response.md +0 -89
  97. package/docs/plugins/jspsych-categorize-animation.md +0 -60
  98. package/docs/plugins/jspsych-categorize-html.md +0 -52
  99. package/docs/plugins/jspsych-categorize-image.md +0 -53
  100. package/docs/plugins/jspsych-cloze.md +0 -45
  101. package/docs/plugins/jspsych-external-html.md +0 -70
  102. package/docs/plugins/jspsych-free-sort.md +0 -55
  103. package/docs/plugins/jspsych-fullscreen.md +0 -57
  104. package/docs/plugins/jspsych-html-button-response.md +0 -42
  105. package/docs/plugins/jspsych-html-keyboard-response.md +0 -51
  106. package/docs/plugins/jspsych-html-slider-response.md +0 -45
  107. package/docs/plugins/jspsych-iat-html.md +0 -64
  108. package/docs/plugins/jspsych-iat-image.md +0 -64
  109. package/docs/plugins/jspsych-image-button-response.md +0 -46
  110. package/docs/plugins/jspsych-image-keyboard-response.md +0 -57
  111. package/docs/plugins/jspsych-image-slider-response.md +0 -52
  112. package/docs/plugins/jspsych-instructions.md +0 -58
  113. package/docs/plugins/jspsych-maxdiff.md +0 -42
  114. package/docs/plugins/jspsych-rdk.md +0 -119
  115. package/docs/plugins/jspsych-reconstruction.md +0 -48
  116. package/docs/plugins/jspsych-resize.md +0 -39
  117. package/docs/plugins/jspsych-same-different-html.md +0 -53
  118. package/docs/plugins/jspsych-same-different-image.md +0 -66
  119. package/docs/plugins/jspsych-serial-reaction-time-mouse.md +0 -50
  120. package/docs/plugins/jspsych-serial-reaction-time.md +0 -57
  121. package/docs/plugins/jspsych-survey-html-form.md +0 -50
  122. package/docs/plugins/jspsych-survey-likert.md +0 -70
  123. package/docs/plugins/jspsych-survey-multi-choice.md +0 -48
  124. package/docs/plugins/jspsych-survey-multi-select.md +0 -53
  125. package/docs/plugins/jspsych-survey-text.md +0 -63
  126. package/docs/plugins/jspsych-video-button-response.md +0 -52
  127. package/docs/plugins/jspsych-video-keyboard-response.md +0 -48
  128. package/docs/plugins/jspsych-video-slider-response.md +0 -58
  129. package/docs/plugins/jspsych-visual-search-circle.md +0 -52
  130. package/docs/plugins/jspsych-vsl-animate-occlusion.md +0 -55
  131. package/docs/plugins/jspsych-vsl-grid-scene.md +0 -62
  132. package/docs/plugins/overview.md +0 -111
  133. package/docs/tutorials/hello-world.md +0 -144
  134. package/docs/tutorials/rt-task.md +0 -1107
  135. package/examples/add-to-end-of-timeline.html +0 -32
  136. package/examples/conditional-and-loop-functions.html +0 -63
  137. package/examples/css/jquery-ui.css +0 -1225
  138. package/examples/data-add-properties.html +0 -40
  139. package/examples/data-as-function.html +0 -36
  140. package/examples/data-from-timeline.html +0 -45
  141. package/examples/data-from-url.html +0 -21
  142. package/examples/demo-flanker.html +0 -108
  143. package/examples/demo-simple-rt-task.html +0 -104
  144. package/examples/demos/demo_1.html +0 -29
  145. package/examples/demos/demo_2.html +0 -43
  146. package/examples/demos/demo_3.html +0 -58
  147. package/examples/display-element-to-embed-experiment.html +0 -73
  148. package/examples/end-active-node.html +0 -52
  149. package/examples/end-experiment.html +0 -43
  150. package/examples/exclusions.html +0 -32
  151. package/examples/external_html/simple_consent.html +0 -4
  152. package/examples/img/1.gif +0 -0
  153. package/examples/img/10.gif +0 -0
  154. package/examples/img/11.gif +0 -0
  155. package/examples/img/12.gif +0 -0
  156. package/examples/img/2.gif +0 -0
  157. package/examples/img/3.gif +0 -0
  158. package/examples/img/4.gif +0 -0
  159. package/examples/img/5.gif +0 -0
  160. package/examples/img/6.gif +0 -0
  161. package/examples/img/7.gif +0 -0
  162. package/examples/img/8.gif +0 -0
  163. package/examples/img/9.gif +0 -0
  164. package/examples/img/age/of1.jpg +0 -0
  165. package/examples/img/age/of2.jpg +0 -0
  166. package/examples/img/age/of3.jpg +0 -0
  167. package/examples/img/age/om1.jpg +0 -0
  168. package/examples/img/age/om2.jpg +0 -0
  169. package/examples/img/age/om3.jpg +0 -0
  170. package/examples/img/age/yf1.jpg +0 -0
  171. package/examples/img/age/yf4.jpg +0 -0
  172. package/examples/img/age/yf5.jpg +0 -0
  173. package/examples/img/age/ym2.jpg +0 -0
  174. package/examples/img/age/ym3.jpg +0 -0
  175. package/examples/img/age/ym5.jpg +0 -0
  176. package/examples/img/backwardN.gif +0 -0
  177. package/examples/img/blue.png +0 -0
  178. package/examples/img/con1.png +0 -0
  179. package/examples/img/con2.png +0 -0
  180. package/examples/img/fixation.gif +0 -0
  181. package/examples/img/happy_face_1.jpg +0 -0
  182. package/examples/img/happy_face_2.jpg +0 -0
  183. package/examples/img/happy_face_3.jpg +0 -0
  184. package/examples/img/happy_face_4.jpg +0 -0
  185. package/examples/img/inc1.png +0 -0
  186. package/examples/img/inc2.png +0 -0
  187. package/examples/img/normalN.gif +0 -0
  188. package/examples/img/orange.png +0 -0
  189. package/examples/img/redX.png +0 -0
  190. package/examples/img/ribbon.jpg +0 -0
  191. package/examples/img/sad_face_1.jpg +0 -0
  192. package/examples/img/sad_face_2.jpg +0 -0
  193. package/examples/img/sad_face_3.jpg +0 -0
  194. package/examples/img/sad_face_4.jpg +0 -0
  195. package/examples/js/snap.svg-min.js +0 -21
  196. package/examples/jspsych-RDK.html +0 -58
  197. package/examples/jspsych-animation.html +0 -33
  198. package/examples/jspsych-audio-button-response.html +0 -52
  199. package/examples/jspsych-audio-keyboard-response.html +0 -62
  200. package/examples/jspsych-audio-slider-response.html +0 -55
  201. package/examples/jspsych-call-function.html +0 -32
  202. package/examples/jspsych-canvas-button-response.html +0 -95
  203. package/examples/jspsych-canvas-keyboard-response.html +0 -78
  204. package/examples/jspsych-canvas-slider-response.html +0 -67
  205. package/examples/jspsych-categorize-animation.html +0 -46
  206. package/examples/jspsych-categorize-html.html +0 -38
  207. package/examples/jspsych-categorize-image.html +0 -38
  208. package/examples/jspsych-cloze.html +0 -42
  209. package/examples/jspsych-free-sort.html +0 -97
  210. package/examples/jspsych-fullscreen.html +0 -44
  211. package/examples/jspsych-html-button-response.html +0 -46
  212. package/examples/jspsych-html-keyboard-response.html +0 -42
  213. package/examples/jspsych-html-slider-response.html +0 -53
  214. package/examples/jspsych-iat.html +0 -510
  215. package/examples/jspsych-image-button-response.html +0 -84
  216. package/examples/jspsych-image-keyboard-response.html +0 -78
  217. package/examples/jspsych-image-slider-response.html +0 -76
  218. package/examples/jspsych-instructions.html +0 -37
  219. package/examples/jspsych-maxdiff.html +0 -33
  220. package/examples/jspsych-reconstruction.html +0 -43
  221. package/examples/jspsych-resize.html +0 -34
  222. package/examples/jspsych-same-different-html.html +0 -28
  223. package/examples/jspsych-same-different-image.html +0 -33
  224. package/examples/jspsych-serial-reaction-time-mouse.html +0 -98
  225. package/examples/jspsych-serial-reaction-time.html +0 -54
  226. package/examples/jspsych-survey-html-form.html +0 -33
  227. package/examples/jspsych-survey-likert.html +0 -42
  228. package/examples/jspsych-survey-multi-choice.html +0 -40
  229. package/examples/jspsych-survey-multi-select.html +0 -42
  230. package/examples/jspsych-survey-text.html +0 -34
  231. package/examples/jspsych-video-button-response.html +0 -57
  232. package/examples/jspsych-video-keyboard-response.html +0 -53
  233. package/examples/jspsych-video-slider-response.html +0 -55
  234. package/examples/jspsych-visual-search-circle.html +0 -58
  235. package/examples/jspsych-vsl-animate-occlusion.html +0 -29
  236. package/examples/jspsych-vsl-grid-scene.html +0 -41
  237. package/examples/lexical-decision.html +0 -132
  238. package/examples/manual-preloading.html +0 -53
  239. package/examples/pause-unpause.html +0 -33
  240. package/examples/progress-bar.html +0 -62
  241. package/examples/sound/hammer.mp3 +0 -0
  242. package/examples/sound/sound.mp3 +0 -0
  243. package/examples/sound/speech_blue.mp3 +0 -0
  244. package/examples/sound/speech_green.mp3 +0 -0
  245. package/examples/sound/speech_joke.mp3 +0 -0
  246. package/examples/sound/speech_red.mp3 +0 -0
  247. package/examples/sound/tone.mp3 +0 -0
  248. package/examples/timeline-variables-sampling.html +0 -50
  249. package/examples/timeline-variables.html +0 -55
  250. package/examples/video/sample_video.mp4 +0 -0
  251. package/jspsych.js +0 -2796
  252. package/license.txt +0 -21
  253. package/mkdocs.yml +0 -104
  254. package/plugins/jspsych-animation.js +0 -189
  255. package/plugins/jspsych-audio-button-response.js +0 -247
  256. package/plugins/jspsych-audio-keyboard-response.js +0 -204
  257. package/plugins/jspsych-audio-slider-response.js +0 -262
  258. package/plugins/jspsych-call-function.js +0 -58
  259. package/plugins/jspsych-canvas-button-response.js +0 -199
  260. package/plugins/jspsych-canvas-keyboard-response.js +0 -155
  261. package/plugins/jspsych-canvas-slider-response.js +0 -207
  262. package/plugins/jspsych-categorize-animation.js +0 -266
  263. package/plugins/jspsych-categorize-html.js +0 -220
  264. package/plugins/jspsych-categorize-image.js +0 -222
  265. package/plugins/jspsych-cloze.js +0 -112
  266. package/plugins/jspsych-external-html.js +0 -112
  267. package/plugins/jspsych-free-sort.js +0 -444
  268. package/plugins/jspsych-fullscreen.js +0 -104
  269. package/plugins/jspsych-html-button-response.js +0 -188
  270. package/plugins/jspsych-html-keyboard-response.js +0 -149
  271. package/plugins/jspsych-html-slider-response.js +0 -202
  272. package/plugins/jspsych-iat-html.js +0 -284
  273. package/plugins/jspsych-iat-image.js +0 -286
  274. package/plugins/jspsych-image-button-response.js +0 -311
  275. package/plugins/jspsych-image-keyboard-response.js +0 -247
  276. package/plugins/jspsych-image-slider-response.js +0 -353
  277. package/plugins/jspsych-instructions.js +0 -237
  278. package/plugins/jspsych-maxdiff.js +0 -174
  279. package/plugins/jspsych-rdk.js +0 -1373
  280. package/plugins/jspsych-reconstruction.js +0 -134
  281. package/plugins/jspsych-resize.js +0 -166
  282. package/plugins/jspsych-same-different-html.js +0 -168
  283. package/plugins/jspsych-same-different-image.js +0 -169
  284. package/plugins/jspsych-serial-reaction-time-mouse.js +0 -213
  285. package/plugins/jspsych-serial-reaction-time.js +0 -247
  286. package/plugins/jspsych-survey-html-form.js +0 -171
  287. package/plugins/jspsych-survey-likert.js +0 -195
  288. package/plugins/jspsych-survey-multi-choice.js +0 -208
  289. package/plugins/jspsych-survey-multi-select.js +0 -232
  290. package/plugins/jspsych-survey-text.js +0 -185
  291. package/plugins/jspsych-video-button-response.js +0 -320
  292. package/plugins/jspsych-video-keyboard-response.js +0 -279
  293. package/plugins/jspsych-video-slider-response.js +0 -351
  294. package/plugins/jspsych-visual-search-circle.js +0 -259
  295. package/plugins/jspsych-vsl-animate-occlusion.js +0 -196
  296. package/plugins/jspsych-vsl-grid-scene.js +0 -103
  297. package/plugins/template/jspsych-plugin-template.js +0 -35
  298. package/tests/README.md +0 -7
  299. package/tests/jsPsych/default-iti.test.js +0 -51
  300. package/tests/jsPsych/default-parameters.test.js +0 -58
  301. package/tests/jsPsych/endexperiment.test.js +0 -49
  302. package/tests/jsPsych/events.test.js +0 -369
  303. package/tests/jsPsych/init.test.js +0 -48
  304. package/tests/jsPsych/loads.test.js +0 -7
  305. package/tests/jsPsych/min-rt.test.js +0 -58
  306. package/tests/jsPsych/progressbar.test.js +0 -202
  307. package/tests/jsPsych/timeline-variables.test.js +0 -254
  308. package/tests/jsPsych/timelines.test.js +0 -498
  309. package/tests/jsPsych.data/datacollection.test.js +0 -116
  310. package/tests/jsPsych.data/datacolumn.test.js +0 -50
  311. package/tests/jsPsych.data/datamodule.test.js +0 -152
  312. package/tests/jsPsych.data/dataparameter.test.js +0 -251
  313. package/tests/jsPsych.data/interactions.test.js +0 -109
  314. package/tests/jsPsych.pluginAPI/pluginapi.test.js +0 -144
  315. package/tests/jsPsych.randomization/randomziation.test.js +0 -27
  316. package/tests/jsPsych.utils/utils.test.js +0 -58
  317. package/tests/media/blue.png +0 -0
  318. package/tests/media/orange.png +0 -0
  319. package/tests/media/sample_video.mp4 +0 -0
  320. package/tests/media/sound.mp3 +0 -0
  321. package/tests/plugins/plugin-animation.test.js +0 -35
  322. package/tests/plugins/plugin-audio-button-response.test.js +0 -15
  323. package/tests/plugins/plugin-audio-keyboard-response.test.js +0 -15
  324. package/tests/plugins/plugin-audio-slider-response.test.js +0 -15
  325. package/tests/plugins/plugin-call-function.test.js +0 -49
  326. package/tests/plugins/plugin-categorize-animation.test.js +0 -274
  327. package/tests/plugins/plugin-categorize-html.test.js +0 -17
  328. package/tests/plugins/plugin-categorize-image.test.js +0 -17
  329. package/tests/plugins/plugin-cloze.test.js +0 -140
  330. package/tests/plugins/plugin-free-sort.test.js +0 -112
  331. package/tests/plugins/plugin-fullscreen.test.js +0 -41
  332. package/tests/plugins/plugin-html-button-response.test.js +0 -161
  333. package/tests/plugins/plugin-html-keyboard-response.test.js +0 -139
  334. package/tests/plugins/plugin-html-slider-response.test.js +0 -155
  335. package/tests/plugins/plugin-iat-html.test.js +0 -328
  336. package/tests/plugins/plugin-iat-image.test.js +0 -308
  337. package/tests/plugins/plugin-image-button-response.test.js +0 -183
  338. package/tests/plugins/plugin-image-keyboard-response.test.js +0 -154
  339. package/tests/plugins/plugin-image-slider-response.test.js +0 -183
  340. package/tests/plugins/plugin-instructions.test.js +0 -66
  341. package/tests/plugins/plugin-maxdiff.test.js +0 -39
  342. package/tests/plugins/plugin-rdk.test.js +0 -17
  343. package/tests/plugins/plugin-reconstruction.test.js +0 -16
  344. package/tests/plugins/plugin-resize.test.js +0 -16
  345. package/tests/plugins/plugin-same-different-html.test.js +0 -17
  346. package/tests/plugins/plugin-same-different-image.test.js +0 -17
  347. package/tests/plugins/plugin-serial-reaction-time-mouse.test.js +0 -42
  348. package/tests/plugins/plugin-serial-reaction-time.test.js +0 -69
  349. package/tests/plugins/plugin-survey-html-form.test.js +0 -44
  350. package/tests/plugins/plugin-survey-likert.test.js +0 -48
  351. package/tests/plugins/plugin-survey-multi-choice.test.js +0 -48
  352. package/tests/plugins/plugin-survey-multi-select.test.js +0 -72
  353. package/tests/plugins/plugin-survey-text.test.js +0 -115
  354. package/tests/plugins/plugin-video-button-response.test.js +0 -35
  355. package/tests/plugins/plugin-video-keyboard-response.test.js +0 -35
  356. package/tests/plugins/plugin-video-slider-response.test.js +0 -34
  357. package/tests/plugins/plugin-visual-search-circle.test.js +0 -16
  358. package/tests/plugins/plugin-vsl-animate-occlusion.test.js +0 -16
  359. package/tests/plugins/plugin-vsl-grid-scene.test.js +0 -16
  360. package/tests/testing-utils.js +0 -13
@@ -1,152 +0,0 @@
1
- const root = '../../';
2
- const utils = require('../testing-utils.js');
3
-
4
- require(root + 'jspsych.js');
5
- require(root + 'plugins/jspsych-html-keyboard-response.js');
6
-
7
- describe('Basic data recording', function(){
8
- test('should be able to get rt after running experiment', function(){
9
- var timeline = [
10
- {type: 'html-keyboard-response', stimulus:'hello'}
11
- ];
12
- jsPsych.init({timeline:timeline});
13
- // click through first trial
14
- utils.pressKey(32);
15
- // check if data contains rt
16
- expect(jsPsych.data.get().select('rt').count()).toBe(1);
17
- })
18
- })
19
-
20
- describe('#addProperties', function(){
21
-
22
- test('should add data to all trials if called before experiment starts', function(){
23
- var timeline = [
24
- {type: 'html-keyboard-response', stimulus:'hello'}
25
- ];
26
- jsPsych.data.addProperties({'testprop': 1});
27
- jsPsych.init({timeline:timeline});
28
- // click through first trial
29
- utils.pressKey(32);
30
- // check if data contains testprop
31
- expect(jsPsych.data.get().select('testprop').count()).toBe(1);
32
- });
33
-
34
- test('should add data to all trials retroactively', function(){
35
- jsPsych.data._fullreset();
36
- var timeline = [
37
- {type: 'html-keyboard-response', stimulus:'hello'}
38
- ];
39
- jsPsych.init({timeline:timeline});
40
- // click through first trial
41
- utils.pressKey(32);
42
- // check if data contains testprop
43
- expect(jsPsych.data.get().select('testprop').count()).toBe(0);
44
- jsPsych.data.addProperties({'testprop': 1});
45
- expect(jsPsych.data.get().select('testprop').count()).toBe(1);
46
- });
47
-
48
- });
49
-
50
- describe('#addDataToLastTrial', function(){
51
- test('should add any data properties to the last trial', function(){
52
- jsPsych.data._fullreset();
53
- var timeline = [
54
- {
55
- type: 'html-keyboard-response',
56
- stimulus: 'hello',
57
- on_finish: function(){
58
- jsPsych.data.addDataToLastTrial({testA: 1, testB: 2});
59
- }
60
- }
61
- ];
62
- jsPsych.init({timeline:timeline});
63
- // click through first trial
64
- utils.pressKey(32);
65
- // check data structure
66
- expect(jsPsych.data.get().select('testA').values[0]).toBe(1);
67
- expect(jsPsych.data.get().select('testB').values[0]).toBe(2);
68
- });
69
- });
70
-
71
- describe('#getLastTrialData', function(){
72
- test('should return a new DataCollection with only the last trial\'s data', function(){
73
- jsPsych.data._fullreset();
74
- var timeline = [
75
- {type: 'html-keyboard-response', stimulus:'hello'},
76
- {type: 'html-keyboard-response', stimulus:'world'}
77
- ];
78
- jsPsych.init({timeline:timeline});
79
- // click through first trial
80
- utils.pressKey(32);
81
- // click through second trial
82
- utils.pressKey(32);
83
- // check data structure
84
- expect(jsPsych.data.getLastTrialData().select('trial_index').values[0]).toBe(1);
85
- });
86
- });
87
-
88
- describe('#getLastTimelineData', function(){
89
- test('should return a new DataCollection with only the last timeline\'s data', function(){
90
- jsPsych.data._fullreset();
91
- var timeline = [
92
- {
93
- timeline:
94
- [
95
- {type: 'html-keyboard-response', stimulus:'hello'},
96
- {type: 'html-keyboard-response', stimulus:'world'},
97
- ]
98
- },
99
- {
100
- timeline:
101
- [
102
- {type: 'html-keyboard-response', stimulus:'second'},
103
- {type: 'html-keyboard-response', stimulus:'time'},
104
- ]
105
- }
106
- ];
107
- jsPsych.init({timeline:timeline});
108
- // click through all four trials
109
- for(var i=0; i<4; i++){
110
- utils.pressKey(32);
111
- }
112
- // check data structure
113
- expect(jsPsych.data.getLastTimelineData().count()).toBe(2);
114
- expect(jsPsych.data.getLastTimelineData().select('trial_index').values[0]).toBe(2);
115
- expect(jsPsych.data.getLastTimelineData().select('trial_index').values[1]).toBe(3);
116
- });
117
- });
118
-
119
- describe('#displayData', function(){
120
- test('should display in json format', function(){
121
- var timeline = [
122
- {type: 'html-keyboard-response', stimulus:'hello'}
123
- ];
124
- jsPsych.init({timeline:timeline});
125
- // click through first trial
126
- utils.pressKey(32);
127
- // overwrite data with custom data
128
- var data = [{col1: 1, col2: 2}, {col1: 3, col2: 4}]
129
- jsPsych.data._customInsert(data);
130
- // display data in json format
131
- jsPsych.data.displayData('json');
132
- // get display element HTML
133
- var html = jsPsych.getDisplayElement().innerHTML;
134
- expect(html).toBe('<pre id="jspsych-data-display">'+JSON.stringify(data, null, '\t')+'</pre>');
135
- });
136
- test('should display in csv format', function(){
137
- var timeline = [
138
- {type: 'html-keyboard-response', stimulus:'hello'}
139
- ];
140
- jsPsych.init({timeline:timeline});
141
- // click through first trial
142
- utils.pressKey(32);
143
- // overwrite data with custom data
144
- var data = [{col1: 1, col2: 2}, {col1: 3, col2: 4}]
145
- jsPsych.data._customInsert(data);
146
- // display data in json format
147
- jsPsych.data.displayData('csv');
148
- // get display element HTML
149
- var html = jsPsych.getDisplayElement().innerHTML;
150
- expect(html).toBe("<pre id=\"jspsych-data-display\">\"col1\",\"col2\"\r\n\"1\",\"2\"\r\n\"3\",\"4\"\r\n</pre>");
151
- });
152
- });
@@ -1,251 +0,0 @@
1
- const root = '../../';
2
- const utils = require('../testing-utils.js');
3
-
4
- describe('The data parameter', function(){
5
- test('should record data to a trial', function(){
6
-
7
- require(root + 'jspsych.js');
8
- require(root + 'plugins/jspsych-html-keyboard-response.js');
9
-
10
- return (new Promise(function(resolve, reject){
11
-
12
- var key_data = null;
13
-
14
- var trial = {
15
- type: 'html-keyboard-response',
16
- stimulus: 'hello',
17
- data: {added: true},
18
- }
19
-
20
- jsPsych.init({
21
- timeline: [trial],
22
- on_finish: function() {
23
- var d = jsPsych.data.get().values()[0].added;
24
- resolve(d);
25
- }
26
- });
27
-
28
- utils.pressKey(32);
29
-
30
- //resolve();
31
- })).then(function(data) { expect(data).toBe(true) });
32
- });
33
-
34
- test('should record data to all nested trials', function(){
35
-
36
- require(root + 'jspsych.js');
37
- require(root + 'plugins/jspsych-html-keyboard-response.js');
38
-
39
- return (new Promise(function(resolve, reject){
40
-
41
- var key_data = null;
42
-
43
- var trial = {
44
- type: 'html-keyboard-response',
45
- timeline: [
46
- {stimulus: 'a'},
47
- {stimulus: 'b'}
48
- ],
49
- data: {added: true},
50
- }
51
-
52
- jsPsych.init({
53
- timeline: [trial],
54
- on_finish: function() {
55
- var d = jsPsych.data.get().filter({added: true}).count();
56
- resolve(d);
57
- }
58
- });
59
-
60
- utils.pressKey(32);
61
-
62
- utils.pressKey(32);
63
-
64
- //resolve();
65
- })).then(function(data) { expect(data).toBe(2) });
66
- });
67
-
68
- test('should record data to all nested trials with timeline variables', function(){
69
-
70
- require(root + 'jspsych.js');
71
- require(root + 'plugins/jspsych-html-keyboard-response.js');
72
-
73
- return (new Promise(function(resolve, reject){
74
-
75
- var key_data = null;
76
-
77
- var vars = [
78
- {stimulus: 'a'},
79
- {stimulus: 'b'}
80
- ];
81
-
82
- var trial = {
83
- timeline: [
84
- {type: 'html-keyboard-response',
85
- stimulus: jsPsych.timelineVariable('stimulus')}
86
- ],
87
- timeline_variables: vars,
88
- data: {added: true},
89
- }
90
-
91
- jsPsych.init({
92
- timeline: [trial],
93
- on_finish: function() {
94
- var d = jsPsych.data.get().filter({added: true}).count();
95
- resolve(d);
96
- }
97
- });
98
-
99
- utils.pressKey(32);
100
-
101
- utils.pressKey(32);
102
-
103
- //resolve();
104
- })).then(function(data) { expect(data).toBe(2) });
105
- });
106
-
107
- test('should work as timeline variable at root level', function(){
108
- require(root + 'jspsych.js');
109
- require(root + 'plugins/jspsych-html-keyboard-response.js');
110
-
111
- var trial = {
112
- timeline: [
113
- {type: 'html-keyboard-response', stimulus: 'foo', data: jsPsych.timelineVariable('d')}
114
- ],
115
- timeline_variables: [
116
- {d: {added: true}},
117
- {d: {added: false}}
118
- ]
119
- }
120
-
121
- jsPsych.init({
122
- timeline: [trial]
123
- });
124
-
125
- utils.pressKey(32); // trial 1
126
- utils.pressKey(32); // trial 2
127
-
128
- expect(jsPsych.data.get().filter({added: true}).count()).toBe(1);
129
- expect(jsPsych.data.get().filter({added: false}).count()).toBe(1);
130
- });
131
-
132
- test('should work as timeline variable at nested level', function(){
133
- require(root + 'jspsych.js');
134
- require(root + 'plugins/jspsych-html-keyboard-response.js');
135
-
136
- var trial = {
137
- timeline: [
138
- {type: 'html-keyboard-response', stimulus: 'foo', data: {added: jsPsych.timelineVariable('added')}}
139
- ],
140
- timeline_variables: [
141
- {added: true},
142
- {added: false}
143
- ]
144
- }
145
-
146
- jsPsych.init({
147
- timeline: [trial]
148
- });
149
-
150
- utils.pressKey(32); // trial 1
151
- utils.pressKey(32); // trial 2
152
-
153
- expect(jsPsych.data.get().filter({added: true}).count()).toBe(1);
154
- expect(jsPsych.data.get().filter({added: false}).count()).toBe(1);
155
- });
156
-
157
- test('timeline variable should be available in trial on_finish', function(){
158
- require(root + 'jspsych.js');
159
- require(root + 'plugins/jspsych-html-keyboard-response.js');
160
-
161
- var trial = {
162
- timeline: [
163
- {
164
- type: 'html-keyboard-response',
165
- stimulus: 'foo',
166
- data: {added: jsPsych.timelineVariable('added')},
167
- on_finish: function(data){
168
- data.added_copy = data.added;
169
- }}
170
- ],
171
- timeline_variables: [
172
- {added: true},
173
- {added: false}
174
- ]
175
- }
176
-
177
- jsPsych.init({
178
- timeline: [trial]
179
- });
180
-
181
- utils.pressKey(32); // trial 1
182
- utils.pressKey(32); // trial 2
183
-
184
- expect(jsPsych.data.get().filter({added_copy: true}).count()).toBe(1);
185
- expect(jsPsych.data.get().filter({added_copy: false}).count()).toBe(1);
186
- });
187
-
188
- test('should record data to all nested trials with timeline variables even when nested trials have own data', function(){
189
-
190
- require(root + 'jspsych.js');
191
- require(root + 'plugins/jspsych-html-keyboard-response.js');
192
-
193
- return (new Promise(function(resolve, reject){
194
-
195
- var key_data = null;
196
-
197
- var vars = [
198
- {stimulus: 'a'},
199
- {stimulus: 'b'}
200
- ];
201
-
202
- var trial = {
203
- timeline: [
204
- {
205
- type: 'html-keyboard-response',
206
- stimulus: jsPsych.timelineVariable('stimulus'),
207
- data: {foo: 1}
208
- }
209
- ],
210
- timeline_variables: vars,
211
- data: {added: true},
212
- }
213
-
214
- jsPsych.init({
215
- timeline: [trial],
216
- on_finish: function() {
217
- var d = jsPsych.data.get().filter({added: true, foo: 1}).count();
218
- resolve(d);
219
- }
220
- });
221
-
222
- utils.pressKey(32);
223
-
224
- utils.pressKey(32);
225
-
226
- //resolve();
227
- })).then(function(data) { expect(data).toBe(2) });
228
- });
229
-
230
- test('should accept a function as a parameter', function(done){
231
- var trial = {
232
- type: 'html-keyboard-response',
233
- stimulus: 'foo',
234
- data: {
235
- a: function(){ return 1; }
236
- }
237
- }
238
-
239
- var timeline = [trial];
240
-
241
- jsPsych.init({
242
- timeline: timeline,
243
- on_finish: function(){
244
- expect(jsPsych.data.get().values()[0].a).toBe(1);
245
- done();
246
- }
247
- })
248
-
249
- utils.pressKey(32);
250
- })
251
- });
@@ -1,109 +0,0 @@
1
- const root = '../../';
2
- const utils = require('../testing-utils.js');
3
-
4
- describe('Data recording', function(){
5
-
6
- beforeEach(function(){
7
- require(root + 'jspsych.js');
8
- require(root + 'plugins/jspsych-html-keyboard-response.js');
9
- })
10
-
11
- test('record focus events', function(){
12
- var timeline = [
13
- {type: 'html-keyboard-response', stimulus: 'hello'}
14
- ];
15
- jsPsych.init({timeline:timeline});
16
- window.dispatchEvent(new Event('focus'));
17
- // click through first trial
18
- utils.pressKey(32);
19
- // check data
20
- expect(jsPsych.data.getInteractionData().filter({event: 'focus'}).count()).toBe(1);
21
- })
22
-
23
- test('record blur events', function(){
24
- var timeline = [
25
- {type: 'html-keyboard-response', stimulus: 'hello'}
26
- ];
27
- jsPsych.init({timeline:timeline});
28
- window.dispatchEvent(new Event('blur'));
29
- // click through first trial
30
- utils.pressKey(32);
31
- // check data
32
- expect(jsPsych.data.getInteractionData().filter({event: 'blur'}).count()).toBe(1);
33
- })
34
-
35
- /* not sure yet how to test fullscreen events with jsdom engine */
36
-
37
- test.skip('record fullscreenenter events', function(){
38
- var timeline = [
39
- {type: 'html-keyboard-response', stimulus: 'hello'}
40
- ];
41
- jsPsych.init({timeline:timeline});
42
- // click through first trial
43
- utils.pressKey(32);
44
- // check if data contains rt
45
- });
46
-
47
- test.skip('record fullscreenexit events', function(){
48
- var timeline = [
49
- {type: 'html-keyboard-response', stimulus: 'hello'}
50
- ];
51
- jsPsych.init({timeline:timeline});
52
- // click through first trial
53
- utils.pressKey(32);
54
- // check if data contains rt
55
- });
56
-
57
- })
58
-
59
- describe('on_interaction_data_update', function(){
60
-
61
- beforeEach(function(){
62
- require(root + 'jspsych.js');
63
- require(root + 'plugins/jspsych-html-keyboard-response.js');
64
- })
65
-
66
- test('fires for blur', function(){
67
-
68
- var updatefn = jest.fn();
69
-
70
- var timeline = [
71
- {type: 'html-keyboard-response', stimulus: 'hello'}
72
- ];
73
- jsPsych.init({
74
- timeline:timeline,
75
- on_interaction_data_update: updatefn
76
- });
77
- window.dispatchEvent(new Event('blur'));
78
- expect(updatefn.mock.calls.length).toBeGreaterThanOrEqual(1); // >= because of jsdom window not isolated to this test.
79
-
80
- // click through first trial
81
- utils.pressKey(32);
82
- });
83
-
84
- test('fires for focus', function(){
85
- var updatefn = jest.fn();
86
-
87
- var timeline = [
88
- {type: 'html-keyboard-response', stimulus: 'hello'}
89
- ];
90
- jsPsych.init({
91
- timeline:timeline,
92
- on_interaction_data_update: updatefn
93
- });
94
- window.dispatchEvent(new Event('focus'));
95
- expect(updatefn.mock.calls.length).toBeGreaterThanOrEqual(1); // >= because of jsdom window not isolated to this test.
96
- // click through first trial
97
- utils.pressKey(32);
98
- })
99
-
100
- /* not sure yet how to test fullscreen events with jsdom engine */
101
-
102
- test.skip('fires for fullscreenexit', function(){
103
-
104
- })
105
-
106
- test.skip('fires for fullscreenenter', function(){
107
-
108
- })
109
- })
@@ -1,144 +0,0 @@
1
- const root = '../../';
2
-
3
- require(root + 'jspsych.js');
4
- require(root + 'plugins/jspsych-html-keyboard-response.js');
5
-
6
- describe('#getKeyboardResponse', function(){
7
- beforeEach(function(){
8
- var t = {
9
- type: 'html-keyboard-response',
10
- stimulus: 'foo',
11
- choices: ['Q']
12
- }
13
-
14
- jsPsych.init({
15
- timeline: [t]
16
- })
17
- });
18
- test('should execute a function after successful keypress', function(){
19
- var callback = jest.fn();
20
- jsPsych.pluginAPI.getKeyboardResponse({callback_function: callback});
21
- expect(callback.mock.calls.length).toBe(0);
22
- document.querySelector('.jspsych-display-element').dispatchEvent(new KeyboardEvent('keydown', {keyCode: 32}));
23
- expect(callback.mock.calls.length).toBe(1);
24
- document.querySelector('.jspsych-display-element').dispatchEvent(new KeyboardEvent('keyup', {keyCode: 32}));
25
- expect(callback.mock.calls.length).toBe(1);
26
- });
27
- test('should execute only valid keys', function(){
28
- var callback = jest.fn();
29
- jsPsych.pluginAPI.getKeyboardResponse({callback_function: callback, valid_responses: [13]});
30
- expect(callback.mock.calls.length).toBe(0);
31
- document.querySelector('.jspsych-display-element').dispatchEvent(new KeyboardEvent('keydown', {keyCode: 54}));
32
- document.querySelector('.jspsych-display-element').dispatchEvent(new KeyboardEvent('keyup', {keyCode: 54}));
33
- expect(callback.mock.calls.length).toBe(0);
34
- document.querySelector('.jspsych-display-element').dispatchEvent(new KeyboardEvent('keydown', {keyCode: 13}));
35
- document.querySelector('.jspsych-display-element').dispatchEvent(new KeyboardEvent('keyup', {keyCode: 13}));
36
- expect(callback.mock.calls.length).toBe(1);
37
- });
38
- test('should not respond when jsPsych.NO_KEYS is used', function(){
39
- var callback = jest.fn();
40
- jsPsych.pluginAPI.getKeyboardResponse({callback_function: callback, valid_responses: jsPsych.NO_KEYS});
41
- expect(callback.mock.calls.length).toBe(0);
42
- document.querySelector('.jspsych-display-element').dispatchEvent(new KeyboardEvent('keydown', {keyCode: 54}));
43
- document.querySelector('.jspsych-display-element').dispatchEvent(new KeyboardEvent('keyup', {keyCode: 54}));
44
- expect(callback.mock.calls.length).toBe(0);
45
- document.querySelector('.jspsych-display-element').dispatchEvent(new KeyboardEvent('keydown', {keyCode: 32}));
46
- document.querySelector('.jspsych-display-element').dispatchEvent(new KeyboardEvent('keyup', {keyCode: 32}));
47
- expect(callback.mock.calls.length).toBe(0);
48
- });
49
- test('should not respond to held keys when allow_held_key is false', function(){
50
- var callback = jest.fn();
51
- document.querySelector('.jspsych-display-element').dispatchEvent(new KeyboardEvent('keydown', {keyCode: 32}));
52
- jsPsych.pluginAPI.getKeyboardResponse({callback_function: callback, valid_responses: jsPsych.ALL_KEYS, allow_held_key: false});
53
- document.querySelector('.jspsych-display-element').dispatchEvent(new KeyboardEvent('keydown', {keyCode: 32}));
54
- expect(callback.mock.calls.length).toBe(0);
55
- document.querySelector('.jspsych-display-element').dispatchEvent(new KeyboardEvent('keyup', {keyCode: 32}));
56
- document.querySelector('.jspsych-display-element').dispatchEvent(new KeyboardEvent('keydown', {keyCode: 32}));
57
- document.querySelector('.jspsych-display-element').dispatchEvent(new KeyboardEvent('keyup', {keyCode: 32}));
58
- expect(callback.mock.calls.length).toBe(1);
59
- });
60
- test('should respond to held keys when allow_held_key is true', function(){
61
- var callback = jest.fn();
62
- document.querySelector('.jspsych-display-element').dispatchEvent(new KeyboardEvent('keydown', {keyCode: 32}));
63
- jsPsych.pluginAPI.getKeyboardResponse({callback_function: callback, valid_responses: jsPsych.ALL_KEYS, allow_held_key: true});
64
- document.querySelector('.jspsych-display-element').dispatchEvent(new KeyboardEvent('keydown', {keyCode: 32}));
65
- expect(callback.mock.calls.length).toBe(1);
66
- document.querySelector('.jspsych-display-element').dispatchEvent(new KeyboardEvent('keyup', {keyCode: 32}));
67
- });
68
- })
69
-
70
- describe('#cancelKeyboardResponse', function(){
71
- test('should cancel a keyboard response listener', function(){
72
- var callback = jest.fn();
73
- var listener = jsPsych.pluginAPI.getKeyboardResponse({callback_function: callback});
74
- expect(callback.mock.calls.length).toBe(0);
75
- jsPsych.pluginAPI.cancelKeyboardResponse(listener);
76
- document.querySelector('.jspsych-display-element').dispatchEvent(new KeyboardEvent('keydown', {keyCode: 32}));
77
- document.querySelector('.jspsych-display-element').dispatchEvent(new KeyboardEvent('keyup', {keyCode: 32}));
78
- expect(callback.mock.calls.length).toBe(0);
79
- });
80
- });
81
-
82
- describe('#cancelAllKeyboardResponses', function(){
83
- test('should cancel all keyboard response listeners', function(){
84
- var callback = jest.fn();
85
- jsPsych.pluginAPI.getKeyboardResponse({callback_function: callback});
86
- expect(callback.mock.calls.length).toBe(0);
87
- jsPsych.pluginAPI.cancelAllKeyboardResponses();
88
- document.querySelector('.jspsych-display-element').dispatchEvent(new KeyboardEvent('keydown', {keyCode: 32}));
89
- document.querySelector('.jspsych-display-element').dispatchEvent(new KeyboardEvent('keyup', {keyCode: 32}));
90
- expect(callback.mock.calls.length).toBe(0);
91
- });
92
- });
93
-
94
- describe('#compareKeys', function(){
95
- test('should compare keys regardless of type', function(){
96
- expect(jsPsych.pluginAPI.compareKeys('q', 81)).toBe(true);
97
- expect(jsPsych.pluginAPI.compareKeys(81, 81)).toBe(true);
98
- expect(jsPsych.pluginAPI.compareKeys('q', 'Q')).toBe(true);
99
- expect(jsPsych.pluginAPI.compareKeys(80, 81)).toBe(false);
100
- expect(jsPsych.pluginAPI.compareKeys('q','1')).toBe(false);
101
- expect(jsPsych.pluginAPI.compareKeys('q',80)).toBe(false);
102
- });
103
- });
104
-
105
- describe('#convertKeyCharacterToKeyCode', function(){
106
- test('should return the keyCode for a particular character', function(){
107
- expect(jsPsych.pluginAPI.convertKeyCharacterToKeyCode('q')).toBe(81);
108
- expect(jsPsych.pluginAPI.convertKeyCharacterToKeyCode('1')).toBe(49);
109
- expect(jsPsych.pluginAPI.convertKeyCharacterToKeyCode('space')).toBe(32);
110
- expect(jsPsych.pluginAPI.convertKeyCharacterToKeyCode('enter')).toBe(13);
111
- });
112
- });
113
-
114
- describe('#convertKeyCodeToKeyCharacter', function(){
115
- test('should return the keyCode for a particular character', function(){
116
- expect(jsPsych.pluginAPI.convertKeyCodeToKeyCharacter(81)).toBe('q');
117
- expect(jsPsych.pluginAPI.convertKeyCodeToKeyCharacter(49)).toBe('1');
118
- expect(jsPsych.pluginAPI.convertKeyCodeToKeyCharacter(32)).toBe('space');
119
- expect(jsPsych.pluginAPI.convertKeyCodeToKeyCharacter(13)).toBe('enter');
120
- });
121
- });
122
-
123
- describe('#setTimeout', function(){
124
- test('basic setTimeout control with centralized storage', function(){
125
- jest.useFakeTimers();
126
- var callback = jest.fn();
127
- jsPsych.pluginAPI.setTimeout(callback, 1000);
128
- expect(callback).not.toBeCalled();
129
- jest.runAllTimers();
130
- expect(callback).toBeCalled();
131
- })
132
- })
133
-
134
- describe('#clearAllTimeouts', function(){
135
- test('clear timeouts before they execute', function(){
136
- jest.useFakeTimers();
137
- var callback = jest.fn();
138
- jsPsych.pluginAPI.setTimeout(callback, 5000);
139
- expect(callback).not.toBeCalled();
140
- jsPsych.pluginAPI.clearAllTimeouts();
141
- jest.runAllTimers();
142
- expect(callback).not.toBeCalled();
143
- })
144
- })
@@ -1,27 +0,0 @@
1
- const root = '../../';
2
-
3
- require(root + 'jspsych.js');
4
-
5
-
6
- describe('#shuffle', function(){
7
- test('should produce fixed order with mock RNG', function(){
8
- Math.random = jest.fn().mockImplementation(function(){ return 0.5; });
9
- var arr = [1,2,3,4,5,6];
10
- expect(jsPsych.randomization.shuffle(arr)).toEqual([1,6,2,5,3,4]);
11
- });
12
- });
13
-
14
- describe('shuffleAlternateGroups', function(){
15
- test('should shuffle in alternating groups', function(){
16
- Math.random = jest.fn().mockImplementation(function(){ return 0.5; });
17
- var toShuffle = [['a','b','c',], [1,2,3]];
18
- expect(jsPsych.randomization.shuffleAlternateGroups(toShuffle)).toEqual(['a',1,'c',3,'b',2]);
19
- });
20
- })
21
-
22
- describe('#randomID', function(){
23
- test('should produce ID based on mock RNG', function(){
24
- Math.random = jest.fn().mockReturnValueOnce(0.1).mockReturnValueOnce(0.2).mockReturnValueOnce(0.3);
25
- expect(jsPsych.randomization.randomID(3)).toBe("37a");
26
- });
27
- });