ほとんどの章にクイズと演習があります。これらは有料機能ですが、包括的なプレビューが利用可能です。この章では、それらの使用方法について説明します。
インストール
impatient-js-quiz.zip をダウンロードして解凍します。クイズアプリの実行
impatient-js-quiz/index.html を開きます。演習をインストールするには
impatient-js-code.zip をダウンロードして解凍します。README.txt の指示に従います。exercises/quizzes-exercises/first_module_test.mjs本書のすべての演習は、テストフレームワーク Mocha を介して実行されるテストです。このセクションでは、簡単な紹介を行います。
典型的なテストコードは2つの部分に分かれています。
たとえば、次の2つのファイルを考えてみましょう。
id.mjs (テスト対象のコード)id_test.mjs (テスト)コード自体は id.mjs にあります。
export function id(x) {
return x;
}ここで重要なのは、テストしたいものはすべてエクスポートする必要があるということです。そうしないと、テストコードからアクセスできません。
テストの正確な詳細については心配しないでください
テストの正確な詳細については心配する必要はありません。テストは常に実装済みです。そのため、読むだけで、書く必要はありません。
コードのテストは id_test.mjs にあります。
// npm t demos/quizzes-exercises/id_test.mjs
suite('id_test.mjs');
import * as assert from 'assert/strict'; // (A)
import {id} from './id.mjs'; // (B)
test('My test', () => { // (C)
assert.equal(id('abc'), 'abc'); // (D)
});このテストファイルの中核はD行 - アサーション です: assert.equal() は、id('abc') の期待される結果が 'abc' であることを指定します。
他の行に関しては
test() を呼び出すことによって行われます。t は、AVAのテストAPI(アサーションなど)へのアクセスを提供します。テストを実行するには、コマンドラインで以下を実行します。
npm t demos/quizzes-exercises/id_test.mjs
t は test の省略形です。つまり、このコマンドの長いバージョンは次のとおりです。
npm test demos/quizzes-exercises/id_test.mjs
演習: 最初の演習
次の演習では、演習がどのようなものかについての最初の体験を提供します。
exercises/quizzes-exercises/first_module_test.mjs
読む
非同期プログラミングの章に進むまで、このセクションの読み取りを延期することをお勧めします。
非同期コードのテストを書くには、追加の作業が必要です。テストは後で結果を受け取り、Mochaにまだ終了していないことを知らせる必要があります。以下のサブセクションでは、そのための3つの方法を検討します。
test() に渡すコールバックにパラメータ(例: done)がある場合、Mochaはコールバックベースの非同期処理に切り替えます。非同期処理が完了したら、done を呼び出す必要があります。
test('divideCallback', (done) => {
divideCallback(8, 4, (error, result) => {
if (error) {
done(error);
} else {
assert.strictEqual(result, 2);
done();
}
});
});divideCallback() は次のようになります。
function divideCallback(x, y, callback) {
if (y === 0) {
callback(new Error('Division by zero'));
} else {
callback(null, x / y);
}
}テストがPromiseを返す場合、MochaはPromiseベースの非同期処理に切り替えます。Promiseが履行された場合、テストは成功したと見なされ、Promiseが拒否された場合、または処理がタイムアウトよりも長くかかった場合は失敗したと見なされます。
test('dividePromise 1', () => {
return dividePromise(8, 4)
.then(result => {
assert.strictEqual(result, 2);
});
});dividePromise() は次のように実装されます。
function dividePromise(x, y) {
return new Promise((resolve, reject) => {
if (y === 0) {
reject(new Error('Division by zero'));
} else {
resolve(x / y);
}
});
}非同期関数は常にPromiseを返します。そのため、非同期関数は非同期テストを実装するのに便利な方法です。次のコードは、前の例と同等です。
test('dividePromise 2', async () => {
const result = await dividePromise(8, 4);
assert.strictEqual(result, 2);
// No explicit return necessary!
});明示的に何かを返す必要はありません。暗黙的に返される undefined は、この非同期関数によって返されるPromiseを履行するために使用されます。また、テストコードが例外をスローした場合、非同期関数は返されたPromiseを拒否します。