【モカ】

Mocha とは?

最終更新:
💡 テストの実行と完了を管理し、結果を伝える

Node.jsやブラウザーでJavaScriptのテストを実行するフレームワーク。テストと前後処理、非同期の完了、結果のレポートを管理し、値の検証にはアサーションライブラリなどを組み合わせます。

📌 このページのポイント
Mocha:実行・検証・結果表示の役割Mocha:実行と完了を管理describe / it / 前後処理同期・非同期の完了を扱うアサーションレポーター期待した値を検証結果を出力assert・Chai等Mochaの機能期待値はテストを書く人が決める非同期の完了方法は一つにそろえるdoneと返したPromiseを同時に使わない
実行管理とアサーション、レポーターは役割が違います。モック等の代役は必要に応じて追加し、何も検証しないテストの成功だけでは正しさの証拠になりません。
ひよこ ひよこ
Mochaは何をする?
ペンギン先生 ペンギン先生
JavaScriptのテストを定義して実行し、成功や失敗を報告するフレームワークだよ。BDD形式ではdescribeでテストをまとめ、itで個々のテストを書く。Node.jsやブラウザーで使え、前後処理のフックや非同期の完了の管理もあるんだ。
ひよこ ひよこ
正しい値かも判断してくれる?
ペンギン先生 ペンギン先生
期待する値はテストを書く人が決め、アサーションで検証するよ。Node.js標準のassertやChaiなどを組み合わせられる。Mochaを入れただけで期待値が決まるわけではないし、実行して何も検証しないテストが成功しても、内容が正しい証拠にはならないんだ。
ひよこ ひよこ
非同期テストでは何に注意する?
ペンギン先生 ペンギン先生
完了をMochaへ伝える方法が必要だよ。Promiseを返す、async関数でawaitする、またはdoneを呼ぶ方式を選ぶ。同じテストでPromiseを返しながらdoneも呼ぶと、完了の方法が重複してエラーになる。非同期処理を開始するだけでは、検証が終わる前にテストが完了してしまうこともあるんだ。
ひよこ ひよこ
準備や結果の出し方も作れる?
ペンギン先生 ペンギン先生
beforeEachやafterEachなどで各テストの準備と後片付けを定義できる。結果の表示はMochaのレポーターを選ぶ。アサーションは検証、モックやスタブは代役、レポーターは結果の出力と、役割を分けよう。すべてを必ず外部ライブラリから追加する構成ではないよ。
ひよこ ひよこ
Mochaとほかのツールはどう選ぶ?
ペンギン先生 ペンギン先生
既存の構成、Node.jsやブラウザーなどの実行環境、使うアサーション、CIで必要な出力を確認する。「新規は必ずJest」「Mochaは古いプロジェクトだけ」と利用者数の根拠なしに決めないことが大切だよ。選んだ環境で実行方法と非同期テストの完了条件を合わせよう。
もっと詳しく知りたい人へ

describeをasync関数にしてよい?

Mochaのdescribeは同期的にテストを定義するためのものです。非同期処理はitやbefore・beforeEachなどのフックで、対応する完了方法を使ってください。テストの定義と、そのテストを実行するときの処理を分けることが大切です。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「Mocha」って出てきたら「JavaScriptのテスト実行や前後処理、結果表示を管理するツール」と思えばだいたいOK!
📖 おまけ:英語の意味
「Mocha」 = モカ(ここではテストフレームワークの名称)
💬 JavaScriptのテストを実行するツールです。値を検証するアサーションライブラリや、処理の代役を作るライブラリとは役割を区別します。

参考資料

← 用語集にもどる