⚠ This project is not maintained anymore. Feel free to fork and make it your own ^^
A toolkit to help JavaScript teachers evaluate their students' skills more efficiently.
Alternative short description: a file-based way to produce, publish, collect and grade student assessments.
In the frame of my JavaScript course at EEMI, I developed an online exam application for students, using Google Polymer and Firebase. It's designed to display different variants of each exercise to prevent fraud, and automatic student evaluation/grading, for both quizzes and coding exercises.
It's made of:
🇫🇷 Annonce de sortie en Français: Un exerciseur en ligne + script pour corriger et noter le code de vos étudiants
▶️ Demo video: (click to play)
▶️ Interactive demo: (click to try)
I've been using js-test:
Run the following steps in a bash-compatible terminal:
$ git clone https://github.com/adrienjoly/js-test.git && cd js-test
$ nvm use # to use the right node.js version
$ npm install # to install dependencies
$ npm run create # to generate sample exercises and configuration to `/exam-data`
$ vi /exam-data/ex.01.quizz.template.md # to edit quizz questions
$ vi /exam-data/ex.02.code.template.md # to edit coding exercise(s)
Video walkthrough: How I create automated student exams using Markdown - YouTube
After editing the exercise files (see above), run the following commands:
$ npm run build # to compile exercise data into `/public/scripts/exam-data.js`
$ npm start # to run the web server, until you press ctrl-c
Then, open localhost:8080 to test the assessment.
Read how to write assessments (a.k.a. exam templates) and examples to learn how to write quizzes and coding exercises.
After editing and testing the exercise files locally (see above):
apiKey
, databaseURL
and messagingSenderId
properties to the FIREBASE_CONFIG
object of your /exam-data/exam-config.js
file (i.e. overwrite existing values)/exam-data/exam-config.js
file:
backend.type
to firebase
,FIREBASE_CONFIG
object.npm run build
to re-compile your configuration into /public/scripts/exam-data.js
npm run deploy-firebase
(or npm run deploy-firebase-instances
) to push the project to production on Firebase Hostingℹ️️ After disabling PUBLIC_TEST_MODE
in /exam-data/exam-config.js
, don't forget to toggle the active
property (to 1
or 0
) of your Firebase database, to (de-)activate student access to the assessment.
⚠️ Security notice: You may want to protect your Firebase database to prevent accidental or malicious data alteration/loss, as explained in /public/scripts/app-firebase.js
.
At all times, you can:
After having run the steps above, you can either:
npm run eval
(npm run eval-instances
) to compute the scores of answers stored in your Firebase database;npm run eval-firebase-dumps
to do it offline, from a JSON export of your Firebase database.In both cases, resulting grades will be stored in the /exam-data/scores.csv
file.
As an alternative to using Firebase as a back-end, it's possible to ask students to submit their answers by email, or to Google Forms. This alternative has been useful with schools which don't provide Google-based authentification for their students.
/exam-data/exam-config.js
file:
PUBLIC_TEST_MODE
to true
,backend.type
to 'email-submit'
,backend.EMAIL_SUBMIT_CONFIG
to readfile('public/data/submitted.md')
,FIREBASE_CONFIG
object./public/data/intro.md
file, write a message to let students know that refreshing (or changing) the page will cause them to loose their answers./public/data/submitted.md
file:
target="_blank"
attribute, to prevent them from loosing their answers during that process.<pre>{{hashedAnswers}}</pre>
to display the JSON code in question.npm run build
then commit the pending changes to the git
repository that holds your js-test
copy and your exercises.npm run deploy-firebase
, as specified in the procedure above. (i.e. you will need to setup a Firebase app first)js-test
directory, and rename it as student-submissions.csv.json
.node src/extract-student-submissions-from-spreadsheet-json.js ./student-submissions.csv.json
=> this creates a students
directory that contains one JSON file per student submission.npm run eval-student-submissions
to evaluate and grade these student submissions and store their results in exam-data/email-submission
.
If you see any error during this process, it may mean that your testing code needs some fixes. Student mistakes and runtime errors are reported in their own file, not in stdout.
Checkout this YouTube playlist for examples.
ℹ️️ These instructions are not complete yet.
/exam-data/exam-config.js
) so that students can identify using your own google apps domain name (or localhost),build
and deploy
again to your assessment's hosting account. (e.g. Firebase or Heroku)