fireEventではなくuserEventを使う
fireEventではなくuserEventを使うべき理由と、userEventの使い方、userEventが対応できないケースについて解説する。
Table of Contents
fireEventではなくuserEventを使う
React Testing Libraryでは、イベントを実行する方法として、fireEventとuserEventがあるが、基本的にuserEventを利用するべき。
- userEvent:ブラウザ内でユーザーが操作した場合に発生するイベントをシュミレートする。
- fireEvent:DOMの特定のイベントを発火する。dispatchEventの薄いラッパー。
単一のイベントを発火するfireEventを利用して実際のブラウザにおけるインタクションに対していくつものイベントを処理する挙動を再現することは難しいため、より実際に近い挙動を再現できるuserEventが推奨される。
https://testing-library.com/docs/dom-testing-library/api-events/
userEventが対応できないケース
ただし、userEventは完全にカバーできていないケースがいくつかあるため、fireEventの存在は知っておく必要がある。例えば、Shift+矢印キーによる範囲選択やtouchイベントをuserEventはカバーできていない。
- https://github.com/testing-library/user-event/issues/880
- https://github.com/testing-library/user-event/issues/966
- https://github.com/testing-library/user-event/issues/871
userEventの使い方
userEventは次のように利用する。
import userEvent from "@testing-library/user-event";
const user = userEvent.setup();
await user.click();
非推奨なuserEventの使い方
調べるとuserEvent.click()のような呼び出しをしているケースがあるが、user-eventのメジャーアップデートの移行をしやすくするために残された記法であり非推奨。
https://testing-library.com/docs/user-event/intro#writing-tests-with-userevent
import userEvent from "@testing-library/user-event";
await userEvent.click();