Skip to content
Latchkey

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がアサーションを提供します。

A Mocha test with 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レポートを出力できます。

関連ガイド