
TypeScriptを使用してMochaとChaiでテストを書き、nycを用いてカバレッジを取得してみた
この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
こんにちは、るおんです。
皆さんはTypeScriptで書いたコードのテストをどう書いていますか?今回は、Node.jsのテストフレームワークMochaとアサーションライブラリであるChaiを使用してTypeScriptのテストを書いて行きたいと思います。
また、nycを用いてテストカバレッジも取得できるようにしてみたいと思います。
このブログでやること
- 環境構築
- TypeScriptコードをそのままテスト
- MochaとChaiを使ったテストコードの記述
- nycでのテストカバレッジ取得
環境構築
今回使用した動作環境は以下のとおりです。
- OS : MacOS Ventura 13.6.1
- Node.js : v20.0.0
- npm : v9.6.4
- tsc:v5.3.3
プロジェクト作成
まず、新しいプロジェクトディレクトリを作成します。
mkdir ts-test-demo
cd ts-test-demo
必要なライブラリをインストール
次に、必要なライブラリをインストールします。
npm install mocha chai@^4.0.0 ts-node cross-env @types/mocha @types/chai --save-dev
各ライブラリの役割は以下の通りです。
mocha
: テストフレームワークchai
: アサーションライブラリ@types/mocha
: MochaのTypeScript型定義@types/chai
: ChaiのTypeScript型定義ts-node
: TypeScriptをJavaScriptにトランスパイルせずに直接実行するためのツールcross-env
: 環境変数を設定するためのユーティリティnyc
: テストカバレッジを測定するためのツール
Mocha v10でChai v5を実行しようとするとエラーが発生したため、Chaiをv4で固定しています Chai v5 - Unknown file extension ".ts" when running with mocha v10
MochaとChaiはどちらもJavaScriptのテスティングに使用されるツールですが、役割が異なります。Mocha はテストフレームワークであり、テストの構造化、実行、結果のレポート生成などを担当する一方、Chai はアサーションライブラリであり、テストケースの期待値と実際の結果を比較するための豊富なアサーションメソッドなどを提供してくれます。両者を組み合わせることでテストの実行とアサーションの機能を完備できます。一応、Mocha は様々なアサーションライブラリと連携できるためChai 以外のライブラリも選択できます。
Mochaは本来JavaScriptで動作するのですが、ts-nodeを使用することでTypeScript コードを直接実行できるようにすることができます。通常、TypeScriptコードを実行するにはコンパイラを使用してJavaScript に変換する必要があります。ts-nodeはこのプロセスを簡素化し、TypeScriptコードを直接実行できるようにしてくれるため、今回使用していきます。
testコマンド修正
package.jsonのscriptsセクションに、テスト実行コマンドを追加します。
"scripts": {
"test": "cross-env TS_NODE_COMPILER_OPTIONS='{\"module\": \"commonjs\" }' nyc mocha -r ts-node/register 'tests/*.ts'"
}
export const formatAwsAccountId = (idStr: string): string => {
const isNumberString = !isNaN(Number(idStr));
if (isNumberString === false) {
throw new Error("数字ではありません");
}
if (idStr.length !== 12) {
throw new Error("12桁ではありません");
}
// 四桁区切りに「-」を挿入
// 123412341234 => 1234-1234-1234
const replacedId = idStr.replace(/(\d{4})(?=\d)/g, "$1-");
return replacedId;
};
数字を受け取らなかった場合や、12桁でない場合はエラーを投げるようにしています。
テスト作成
次に、テストを記述していきます。まずtestsディレクトリを作成し、formatAwsAccountId.test.tsファイルを作成します。以下のようにテストを記述します。
参考: