LoginSignup
0
0

More than 1 year has passed since last update.

MUI DataGrid を JSDom でテストする

Posted at
  • この記事を書いた時の @mui/x-data-grid のバージョン: 5.5.1

問題

MUI の DataGrid を Jest でテストする場合に、jsdom 上で全てがレンダリングされない問題が発生することがあります。一部の行がレンダリングされなかったり、カラムについても一部だけがレンダリングされたりすることがあります。

そのため react testing library の findByText などで表示されるはずのエレメントを探してもテストが落ちるとか、toMatchSnapshot で記録されるスナップショットファイルの中に表示されるべき列が記録されないといった問題が発生します。

  • 表示されているはずの列が Jest 上の testing-library から見つからない
  • スナップショットを撮ってみると、その中に一部の行や列が含まれていないので正しくリグレッションテストができない
  • Storybook での表示とスナップショットが一致しない

解決方法

この問題を解決する方法は簡単で、DataGrid の disableVirtualization プロパティを true に設定すると、一部が欠けること無くレンダリングされるようになります。

しかし、プロダクションの動作ではこのプロパティを true にはしない方がいいと思いますので、ラップしているコンポーネントがある場合には、そのコンポーネントにも disableVirtualization プロパティを持たせて、Dそこから DataGrid に引き継ぐようにして、テストの時だけそれを true に設定するようにしたら良いでしょう。

参考

disableVirtualizationプロパティを使用して仮想化を完全に無効にすることができます。jsdom やヘッドレスブラウザでグリッドをテストできるようにするには、オフにすることをお勧めします。

:仮想化を無効にすると、DOMのサイズが大きくなり、パフォーマンスが大幅に低下します。テスト目的または小さなデータセットでのみ使用してください。

感想

MUI では、DataGrid に限らず jsdom で挙動が変わる物が結構あるように思います。あるはずのエレメントが見つからないとか、イベントがうまく処理されないとか。
そういうのも含めて付き合っていかないといけないのかなと思っています。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0