ユニットテストしたい(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.json
でnpm 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};
gaslamp
のjest.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に、アップロードしたソースコードを読み込んでもらい、 それに対するユニットテストを作ってもらうようにしています。