第209章:練習:ボタン押したら増えるテスト➕🧪✨
今日は「ボタンをクリックしたら数字が増える」っていう、いちばん王道のUIテストをやってみるよ〜!😆🫶 (この章のゴールは“書けた&動いた”の達成感です🎉)
今日のゴール 🎯💖
- ✅
Counterコンポーネントを作る🧮 - ✅ テストで「クリックしたら 0→1→2」になるのを確認する🖱️➕
- ✅ UIを触るテストの基本形を体に染み込ませる💪✨
テストの流れ(図解)🗺️✨
① Counterコンポーネントを作る 🧮🌸
好きな場所に Counter.tsx を作ってね(例:src/components/Counter.tsx)📁✨
※ボタンを押すので "use client" が必要だよ〜!🎮
"use client";
import { useState } from "react";
export function Counter() {
const [count, setCount] = useState(0);
return (
<div>
<p>
いまの数:<span aria-label="count">{count}</span>
</p>
<button type="button" onClick={() => setCount((c) => c + 1)}>
増やす
</button>
</div>
);
}
ポイント💡
aria-label="count"を付けると、テストで **「countって名前の表示」**として取りやすいよ😊🫶- ボタンは
type="button"を付けておくと、フォームの中でも事故りにくい👍✨
② テストを書く 🧪🖊️✨
例えば src/components/__tests__/Counter.test.tsx を作ってね📁🧸
(__tests__ は好み!同じフォルダに Counter.test.tsx でもOKだよ〜🙆♀️)
import { render, screen } from "@testing-library/react";
import userEvent from "@testing-library/user-event";
import { describe, it, expect } from "vitest";
import { Counter } from "../Counter";
describe("Counter", () => {
it("ボタンを押すと数が増える", async () => {
const user = userEvent.setup();
render(<Counter />);
const count = screen.getByLabelText("count");
const button = screen.getByRole("button", { name: "増やす" });
expect(count.textContent).toBe("0");
await user.click(button);
expect(count.textContent).toBe("1");
await user.click(button);
expect(count.textContent).toBe("2");
});
});
ここが超大事ポイント💖
userEventは await 付きでクリックするのが基本だよ〜!🖱️⏳screen.getByRole("button", { name: "増やす" })は、実際のユーザーが「ボタンを探す」感覚に近いのでおすすめ😊✨
③ テストを実行する ▶️🧪🚀
プロジェクトによってコマンドは違うけど、だいたいこのへん👇✨
npm run test
スクリプトが無い場合は👇
npx vitest
④ つまずきやすい所(出たらここ見て🥺🧯)
🧊 document is not defined が出た!
→ テスト環境が jsdom になってない可能性が高いよ〜!
vitest.config.ts(なければ作成)にこういう設定を入れてね👇
import { defineConfig } from "vitest/config";
export default defineConfig({
test: {
environment: "jsdom",
},
});
🌀 TestingLibraryElementError: Unable to find... が出た!
→ だいたいこのどれか!🥹
aria-label="count"のスペル違い- ボタンの文字が
増やすじゃなくなってる - import のパスが違う(
../Counterが合ってるか確認)🔍
⑤ ミニチャレンジ(余裕があったら)🌟😆
- 「減らす」ボタンも追加して、テストも足してみよ➖🧪
- クリック1回で +5 するボタンを追加してみよ➕➕➕➕➕✨
- 初期値を props で受け取れるようにして、テストで初期値チェックしてみよ🎁
できたらもう、UIテストの基本形はバッチリだよ〜!🎉🫶✨