はじめに
jestのテストを行なっているときに、複数ファイル同時テストするとファイルごとのテストケース数がわからず、全てのファイルのテストケース数合計しか出力されません。
それが不便で、1ファイルごとのテストケース数をまとめて出力してくれるcustom-reportersを作成しました!
1. custom-reporters コード作成
custom-reporters.js
const fs = require('fs');
class CustomReporter {
constructor(globalConfig) {
this._globalConfig = globalConfig;
}
onRunComplete(_, results) {
const ROOT_DIR = this._globalConfig.rootDir;
const testResults = results.testResults.map((testResult) => ({
fileName: testResult.testFilePath.replace(ROOT_DIR, ''),
numTotalTests: // テストケース合計
testResult.numFailingTests +
testResult.numFailingTests +
testResult.numPassingTests +
testResult.numPendingTests +
testResult.numTodoTests,
numFailingTests: testResult.numFailingTests, // 成功したテストケース数
numPassingTests: testResult.numPassingTests, // 失敗したテストケース数
numPendingTests: testResult.numPendingTests, // 保留中のテストケース数
numTodoTests: testResult.numTodoTests, // todoのテストケース数
}));
// console.log(testResults) // ターミナルに表示したい場合
const filePath = './results.json'; // 出力したいファイルパス
fs.writeFile(filePath, JSON.stringify(testResults, null, 2), 'utf8', (error) => {
if (error) {
console.log('ファイルの書き出し中にエラーが発生しました:', error);
}
});
}
getLastError() {
if (this._shouldFail) {
return new Error('Custom error reported!');
}
}
}
module.exports = CustomReporter;
2. jestの設定
jest.config.js
/** @type {import('jest').Config} */
const config = {
reporters: ['default', '<rootDir>/custom-reporters.js'],
// 他、必要な設定を追加
};
export default createJestConfig(config);
3. 出力されるデータ
results.json
[
{
"fileName": "/src/__test__/example-test1.test.ts",
"numTotalTests": 35,
"numFailingTests": 4,
"numPassingTests": 27,
"numPendingTests": 0,
"numTodoTests": 0
},
{
"fileName": "/src/__test__/example-test2.test.ts",
"numTotalTests": 11,
"numFailingTests": 0,
"numPassingTests": 11,
"numPendingTests": 0,
"numTodoTests": 0
},
{
"fileName": "/src/__test__/example-test3.test.ts",
"numTotalTests": 9,
"numFailingTests": 3,
"numPassingTests": 3,
"numPendingTests": 0,
"numTodoTests": 0
}
]
参考資料
おわりに
これで1ファイルごとにテストコマンドを打たずとも、テストケース数がわかるようになりました!
同じ悩みを持った人の、お力になれば幸いです。