Mochaとは?柔軟なJavaScriptテストフレームワーク
Mochaはテストのstructureとrunnerを提供する柔軟なJavaScriptテストフレームワークであり、アサーションやmockingのライブラリを自分で選んで組み込むことができます。
Mochaはバンドルしないアプローチを採用しています。テストを整理して実行するためのクリーンな方法を提供する一方で、アサーションやmocking、その他の関心事は選んだライブラリに委ねます。このモジュール性により、独自のテストスタックを組み立てたいチームにとって長年の定番となってきました。
Mochaとは何か
MochaはNode.jsとブラウザで動作するJavaScriptテストフレームワークです。describe/it構造、hook(before、after、beforeEach)、そして複数のreporterを備えたtest runnerを提供しますが、アサーションとmockingはChaiやSinonといった別のライブラリに意図的に委ねています。
アサーションは自分で用意する
オールインワンのフレームワークとは異なり、Mochaはアサーションライブラリと組み合わせて使います。一般的な選択肢はChaiで、expect、should、assertのスタイルを提供します。Sinonはspy、stub、mockを追加します。このモジュール性は柔軟ですが、すべて込みのツールよりもセットアップの手間が増えることを意味します。
テストの例
Mochaがテストを構造化し、Chaiがアサーションを提供します。
const { expect } = require("chai");
describe("math", () => {
it("adds numbers", () => {
expect(1 + 2).to.equal(3);
});
});CI/CDでの役割
CIでは、"mocha"コマンドがスイートを実行し、失敗時にゼロ以外の終了コードを返します。reporterはCIダッシュボード向けにJUnit XML("mocha-junit-reporter")などの形式を出力できます。Mochaは大規模なスイートを高速化するために並列実行をサポートしています。その柔軟性は、オールインワンのツールでは許されないような特定のアサーションやmockingのセットアップをプロジェクトが必要とする場面で光ります。
代替ツール
JestとVitestはアサーション、mocking、カバレッジをまとめて備えたすべて込みのフレームワークで、配線の手間が少なくて済みます。Node組み込みのtest runnerは軽量な選択肢です。Mochaは、モジュール式でカスタマイズ可能なテストスタックを重視するチームにとって、依然として堅実な選択肢です。
重要なポイント
- MochaはテストのstructureとrunnerをProvidesしますが、アサーションやmockingは提供しません。
- アサーションにはChai、mockにはSinonと組み合わせて使われるのが一般的です。
- CIでは失敗時にゼロ以外の終了コードを返し、JUnitレポートを出力できます。