2024年6月3日
tags: TDD TypeScript Jest テスト
TypeScriptでTDDアプローチを用いた例を紹介します。シンプルな機能として、数値のリストを受け取り、その合計を返す関数を作成します。テストを書くためには、Jestなどのテストフレームワークを使用します。
まずは、機能をテストするための失敗するテストケースを書きます。
// sum.test.ts
import { sum } from './sum';
describe('sum', () => {
it('returns the sum of an array of numbers', () => {
const numbers = [1, 2, 3];
expect(sum(numbers)).toEqual(6);
});
});
次に、テストを通過させるための最もシンプルな実装をします。
// sum.ts
export function sum(numbers: number[]): number {
return numbers.reduce((acc, current) => acc + current, 0);
}
ここで実装されたコードは既にシンプルですが、テストの中で新たに検証する必要があるエッジケース(空の配列など)を追加して、コードの堅牢性を向上させることができます。
// sum.test.tsのテストケースを追加
it('returns 0 for an empty array', () => {
expect(sum([])).toEqual(0);
});
このテストもすでに実装されたsum
関数でパスしますが、将来的にsum
関数の実装を変更する場合にこのテストがその機能を保証します。
この例では、TDDのサイクル(テストの作成、実装、リファクタリング)を通じて、効率的かつ効果的に機能を開発し、保守しやすいコードを維持しています。リファクタリングステップでは主にテスト側での改善が行われ、実装コードはすでにシンプルであるため、大幅な変更は不要でした。