実現したいこと
イベントをテストする際にtest()にasyncを付与するのは、どのような理由があるのでしょうか?
発生している問題・分からないこと
現時点の私の解釈だと、asyncは非同期処理を行いたい関数に付与し、その関数内でawaitを付与することで各々の処理を同期的に行うと思っています。
関数だと上記の意図になると思っていますが、テストする際に何故非同期にする必要があるのか把握できておりません。
テスト対象のPra2.jsはstateを使用しているため、以下の全ての工程が終わるまでテストしないという理由でasyncを付与しているのでしょうか?
①onClickイベント発火(handleClick()呼び出し)
②(handleClick()内で)setCount()呼び出し
③state値更新
④ビューの再レンダリング
ご存じの方、ご教示頂きく思います。
宜しくお願いします。
該当のソースコード
Pra2.js
1import { useState } from "react" 2 3 4export default function Pra2({init}) { 5 const [count, setCount] = useState(init) 6 7 // カウントボタン押下時の処理 8 const handleClick = () => { 9 setCount(count + 1); 10 } 11 12 return ( 13 <> 14 <button type="button" onClick={handleClick}>カウント</button> 15 <p>{count}回、クリックされました。</p> 16 </> 17 18 ) 19}
Pra2.test.js
1import { render, waitFor, screen } from "@testing-library/react"; 2import { userEvent } from "@testing-library/user-event"; 3import Pra2 from "../practiceFiles/Pra2"; 4 5// Pra2.jsのテストファイル 6describe("Pra2のテスト", () => { 7 test("Pra2's event test", async () => { 8 // userEventオブジェクトを生成 9 const ev = userEvent.setup(); 10 11 render(<Pra2 init={0} />); 12 const button = screen.getByRole("button", { name : "カウント"}); 13 const text = screen.getByText(/クリック/); 14 15 ev.click(button); 16 await waitFor(() => { expect(text).toHaveTextContent("1回")}); 17 }) 18})
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
async, awaitを削除して再度テストを行いましたが、テスト結果が同じだったため違いが分かりませんでした。
補足
特になし

回答4件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2025/02/18 23:30