zudo-test-wisdom

Type to search...

to open search from anywhere

レベル1: ユニット/ロジックテスト

vitest または jest を使った純粋なJavaScriptのロジック、データ変換、状態のテスト。

レベル1がテストするもの

レベル1のテストは純粋なロジックを検証します。DOM、ブラウザAPI、視覚的レンダリングに触れることなく、入力を受け取り出力を返す関数が対象です。

典型的な対象:

  • ユーティリティ関数(文字列操作、日付フォーマット、計算)
  • データ変換(APIレスポンスのマッピング、正規化)
  • 状態リデューサーとセレクター
  • バリデーションロジック
  • ビジネスルール

ツール

ツールユースケース
vitestモダンなプロジェクト、Viteベース、高速HMR
jestレガシープロジェクト、CRA、広くサポート

// utils/format-price.ts
export function formatPrice(cents: number): string {
  return `$${(cents / 100).toFixed(2)}`;
}
// utils/format-price.test.ts
import { describe, it, expect } from "vitest";
import { formatPrice } from "./format-price";

describe("formatPrice", () => {
  it("formats cents to dollar string", () => {
    expect(formatPrice(1299)).toBe("$12.99");
  });

  it("handles zero", () => {
    expect(formatPrice(0)).toBe("$0.00");
  });

  it("handles single-digit cents", () => {
    expect(formatPrice(5)).toBe("$0.05");
  });
});

TDDサイクル

ロジックの変更には標準的なTDDサイクルに従います:

  1. 期待される動作を記述する失敗するテストを書く
  2. テストをパスさせる最小限のコードを実装する
  3. テストがグリーンであることを確認する
  4. 必要に応じてリファクタリングする
  5. 各動作について繰り返す

ブラインドスポット

⚠️ Warning

レベル1のテストは視覚的なすべてに対して盲目です。以下を検出できません:

  • 要素が画面にレンダリングされるかどうか
  • CSSの問題(overflow、z-index、opacity、display
  • レイアウトの問題(DOMに存在するが表示されない要素)
  • ブラウザ固有のレンダリング動作
  • ユーザーインタラクションフロー

レベル1は、バグがレンダリングではなくロジックにあると確信している場合に適切な選択です。表示や視覚的な正しさに疑問がある場合は、レベル4または5にエスカレーションしてください。

レベル1を使用するタイミング

シナリオレベル1は適切か?
関数が誤った値を返すはい
データ変換が不正確はい
バリデーションが有効な入力を拒否するはい
要素が画面に表示されないいいえ — レベル4/5を使用
レイアウトが正しくないいいえ — レベル5を使用
クリックハンドラーが動作しないいいえ — レベル2または4を使用

Revision History