At the end of most chapters, there are quizzes and exercises. These are a paid feature, but a comprehensive preview is available. This chapter explains how to get started with them.
Running the quiz app:
impatient-js-quiz/index.htmlin a web browser
To install the exercises:
All exercises in this book are tests that are run via the test framework Mocha. This section gives a brief introduction.
Typical test code is split into two parts:
Take, for example, the following two files:
id.js(code to be tested)
The code itself resides in
The key thing here is: everything you want to test must be exported. Otherwise, the test code can’t access it.
The tests for the code reside in
You don’t need to worry too much about the syntax: You won’t have to write this kind of code yourself – all tests are written for you.
The core of this test file resides in line D – a so-called assertion:
assert.equal() specifies that the expected result of
'abc'. The assertion library, a built-in Node.js module called
assert, is documented in the next chapter.
As for the other lines:
To run the test, we execute the following in a command line:
npm t demos/syntax/id_test.js
t is an abbreviation for
test. That is, the long version of this command is:
npm text demos/syntax/id_test.js
Exercise: Your first exercise
The following exercise gives you a first taste of what exercises are like:
You can postpone reading this section until you get to the chapters on asynchronous programming.
Writing tests for asynchronous code requires extra work: The test receives its results later and has to signal to mocha that it isn’t finished, yet, when it returns. The following subsections examine three ways of doing so.
A test becomes asynchronous if it has at least one parameter. That parameter is usually called
done and receives a function that you call once your code is finished:
A test also becomes asynchronous if it returns a Promise. Mocha considers the test to be finished once the Promise is either fulfilled or rejected. A test is considered successful if the Promise is fulfilled and failed if the Promise is rejected.
Async functions always return Promises. Therefore, an async function is a convenient way of implementing an asynchronous test. The following code is equivalent to the previous example.
You don’t need to explicitly return anything: The implicitly returned
undefined is used to fulfill the Promise returned by this async function. And if the test code throws an exception then the async function takes care of rejecting the returned Promise.