3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

bravesoftAdvent Calendar 2024

Day 16

【jest】ファイルごとのテストケース数を出力するcustom-reporters 作成してみた

Last updated at Posted at 2024-12-15

はじめに

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ファイルごとにテストコマンドを打たずとも、テストケース数がわかるようになりました!
同じ悩みを持った人の、お力になれば幸いです。

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?