ユニットテストしたい(jest

$ npm install --save-dev jest
$ jest --help

jestはゼロコンフィグで利用できるJavaScript用のユニットテストです。 ユニットテスト用なので開発環境(--save-dev)のみにインストールします。 JSの機能だけであれば、GASプロジェクトにも導入できます。

ディレクトリしたい(__tests__

$ tre -l 2
.
├── .gitignore
├── CHANGELOG.md
├── LICENSE
├── README.md
├── __tests__
│   ├── dataframe.constuctor.test.js
│   ├── dataframe.setup.js
│   ├── dataframe.static.test.js
│   ├── dataframe.test.js
│   ├── dataframe.to_arrays.test.js
│   ├── setup.js
│   └── typechecker.test.js
├── gaslamp/
│   ├── .clasp.json
│   ├── appsscript.json
│   ├── dataframe.js
│   ├── typechecker.js
│   └── warnings.js
├── jest.config.js
├── package-lock.json
├── package.json

個人で作成を進めているgaslampプロジェクトにJestを導入しました。 メインのソースはgaslamp/に作成し、 ユニットテストは__tests__/に作成します。 また、jest.config.jsでJestの設定や package.jsonnpm testの動作を設定します。

設定したい(jest.config.js

 1module.exports = {
 2    preset: 'ts-jest',
 3    testEnvironment: 'node',
 4    testMatch: ['**/__tests__/**/*.test.js', '**/__tests__/**/*.test.ts'],
 5    setupFilesAfterEnv: ['<rootDir>/__tests__/setup.js'],
 6    collectCoverageFrom: [
 7        '**/*.{js,ts}',
 8        '!**/node_modules/**',
 9        '!**/coverage/**',
10        '!**/jest.config.js'
11    ],
12    moduleFileExtensions: ['js', 'ts']
13};

gaslampjest.config.jsです。 testMatchで対象となるユニットテスト用のファイルを設定しています。 setupFilesAfterEnvで、Jest実行時に共通して読み込むファイルを設定できます。

collectCoverageFromでカバレッジ測定の対象とするファイルを指定しています。 node_modules/coverage/が保存されるディレクトリなどは除外しています。

ユニットテストしたい

 1describe('Test for モジュール名', () => {
 2    // 正常系
 3    describe('with normal cases', () => {
 4        test('正常系テスト1の内容', () => {
 5            // テストを書く
 6        });
 7
 8        test('正常系テスト2の内容', () => {
 9            // テストを書く
10        });
11
12    });
13
14    // 異常系
15    describe('with edge cases', () => {
16        test.todo('異常系テスト1の予定');
17    });
18})

ユニットテストにはdescribe(...)でテストの説明を設定できます。 またdescribe(...)は入れ子にできます。 そのため、以下のような入れ子構造を意識して作成するとよいと思います。

  • テストするモジュール名1

    • テストする関数1

      • 正常系テストたち

      • 異常系テストたち

    • テストする関数2

      • 正常系テストたち

      • 異常系テストたち

  • テストするクラス名1

    • テストするメソッド1

      • 正常系テストたち

      • 異常系テストたち

    • テストするメソッド2

      • 正常系テストたち

      • 異常系テストたち

正常系テストと異常系テストのセクションを作成することで、 網羅的にテストを作成することがもできます。

ヒント

テストケースを自分で考えるのは大変です。 最近はClaudeに、アップロードしたソースコードを読み込んでもらい、 それに対するユニットテストを作ってもらうようにしています。