O hirunewani blog

fireEventではなくuserEventを使う

Created at

fireEventではなくuserEventを使うべき理由と、userEventの使い方、userEventが対応できないケースについて解説する。

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はカバーできていない。

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();