こんにちは。
今回から、
Reactで学ぶTDD
という新しいシリーズを始めます。
学生や経験の浅い開発者の中には、JavaやSpringなどのバックエンドのテストに慣れていても、フロントエンドのテストにはなじみがない人も多いでしょう。
「画面はブラウザを開いてクリックすれば確認できるのでは?」
そう思うかもしれません。
もちろん目で確認することも大切ですが、プロジェクトが大きくなると、毎回すべてのボタンを押すわけにはいきません。
このシリーズでは、
React
コンポーネントを堅牢にする方法と、テストコードがもたらす開発の楽しさを一緒に学びます。

コンポーネントを堅牢にする方法
フロントエンドのテストでは、画面が表示されるかに加え、ユーザーがWebサイトで行う
操作
や得られる
体験
を検証します。
ユーザーの操作を検証する
「ログインボタンを押すと、読み込み画面が出てメインページへ移動するか」といったシナリオを検証します。
ビジネスロジックを確認する
「カートに入れた商品の合計に10%の割引が適用されるか」といった計算を確認します。
回帰テスト(Regression Test)
新機能を追加したときに、ユーザー登録など、すでに動いていた機能が壊れていないかを自動で確認します。
フロントエンドのコードはよく変わります。デザインが変わることも、コンポーネントを分割することもあります。
テストコードがなければ、変更するたびに「どこか壊れていないか」と不安になりながらブラウザを再読み込みすることになります。
テストがあれば、構造を大きく変えてもテストが通ることを確認でき、自信を持って変更できます。
ほかの人が作ったコンポーネントを使うとき、「propsには何を渡せばいいのか」と聞くことが減ります。
テストコードを読めば、どの状況でどう動くかが明確にわかるからです。
src/components/Button.test.js// 이 테스트만 봐도 Button 컴포넌트의 주 사용법을 알 수 있습니다.
test('클릭하면 onClick 함수가 실행된다', () => {
const handleClick = jest.fn();
render(<Button onClick={handleClick}>저장</Button>);
fireEvent.click(screen.getByText('저장'));
expect(handleClick).toHaveBeenCalledTimes(1);
});
ブラウザを開き、ログインし、画面を移動してボタンを押すには、思った以上に時間がかかります。
TDDの環境では、コマンド1つで何百もの機能を数秒で確認できます。開発も速く進みます。
では、何をテストすればよいのでしょうか。すべてをテストすることはできません。
React
テストの大切な原則は、
ユーザーから見える動作をテストする
ことです。
テストすること(○)
- ユーザーがボタンを押したときに起こること。
- フォームに文字を入力したときの値の変化。
- エラーが起きたとき、画面にメッセージが表示されるか。
テストを省くこと(×)
- コンポーネント内部のstate名が
isVisible か show か。
React
自体が正しく動くか。useStateの検証はReact
チームが行います。
- CSSが適用されたかどうかだけの確認。これは視覚的テストツールの対象です。
画像の案 [氷山の図。水面上の画面やユーザーの操作はテスト対象、水面下の内部変数や実装は対象外]
このシリーズでは、広く使われている強力なツールを利用します。
今回は、
React
でTDDが必要な理由と、何をテストするかを見てきました。大切なのは、ユーザーが信頼できるコードを書くことです。
最初はテストを書くのが面倒で、難しく感じるかもしれません。習慣になると、今度はテストなしでコードを書くほうが不安になります。シートベルトを締めずに運転するように感じるからです。
次回はプロジェクトを作り、
Jest
と
React Testing Library
を設定して、最初のテスト環境を用意します。