← Angular コース
91. 純関数のテスト — 入力と出力だけの関数は最強に試しやすい
テストが最も簡単なのは「入力を渡すと出力が返るだけの関数」、いわゆる純関数です。画面もサーバーも関係ないので、expect(fn(入力)).toBe(期待値) と書くだけで検証できます。関数を呼んで、返り値が期待どおりかを見る。テストの基本形はこれだけで、特別な道具は何も要りません。
実務で効くのは境界値を試す習慣です。普通の値だけでなく、0件の配列、null、極端に大きな値など「端っこ」を渡してみると、バグはたいていそこに潜んでいます。仕様の曖昧さも「0円のときはどうする?」とテストを書く過程で炙り出され、テストが仕様書の役割も果たします。
ここで発想の転換が生まれます。「この処理はテストしにくいな」と感じたら、コンポーネントの中に埋まったロジックを純関数として外に切り出すのです。テストしやすい形に設計を寄せることで、コード自体も見通しがよくなります。テストは書くものである前に、設計を導くものでもあります。
サンプルコード(フレームワーク環境が必要なため表示のみ)
// price.ts — 入力(価格の配列)から出力(合計)を返すだけの純関数
export function totalPrice(prices: number[]): number {
return prices.reduce((sum, p) => sum + p, 0);
}
// price.spec.ts — テストの基本形は expect(関数(入力)).toBe(期待値)
import { totalPrice } from './price';
describe('totalPrice', () => {
it('価格の合計を返す', () => {
expect(totalPrice([100, 250, 50])).toBe(400);
});
it('0件なら0を返す(境界値も必ず試す)', () => {
expect(totalPrice([])).toBe(0);
});
});
サンプルコードで身につける(5本) →
学んだ概念を、素朴な例から実務寄りの例まで5つの具体例で確認します。
公式ドキュメントで詳しく ↗