【React.js/Next.js】React.js テスト Jest・Vitest・React Testing Library 完全入門

React.js / Next.js

React.js テスト って、どんなものがあるのかな?

今回は、React.js アプリの自動テストライブラリ JestVitestReact Testing Library について解説します。

React.js の環境構築がまだの場合は、下記より環境構築を行なってください。

React.js テスト Jest・Vitest・React Testing Library とは?

React.js アプリのテストでは、目的ごとに役割の違うツールを組み合わせて使います。
それぞれの役割は次のとおりになります。

ツール役割
Jest / Vitestテストの実行
React Testing LibraryReactコンポーネントをユーザー目線でテスト

Jest / Vitest 比較表

JestVitest は、どちらもテストを実行するためのツールで、Viteを使っている場合は、基本的に Vitest を選ぶとよりスムーズに導入できます。
また Vitest は、Jest 互換API を持っており、書き方がほぼ共通している ため、既存のJestコード をそのまま流用できるケースが多いです。

新規に Vite + React.js で開発する場合 は、Vitest がおすすめです。
既存の Next.jsJest ベースのプロジェクト では、Jest を選ぶと開発がスムーズになります。

項目JestVitest
特徴実績が豊富・情報が多い高速・Viteと相性が良い
動作速度やや重いかなり速い
安定性実績多数・枯れている比較的新しい(急成長中)
設定の簡単さやや多めシンプル
Vite対応追加設定が必要標準対応(そのまま使える)
TypeScript対応ts-jest など追加設定が必要標準サポート(設定が簡単)
モック機能豊富(jest.fn など)ほぼ同等(vi.fn など)
Jest互換APIあり(多くのAPIが互換)
エコシステム関連ライブラリが非常に豊富主要ライブラリは対応済み
おすすめな人Next.js / 既存プロジェクトVite + React / 新規プロジェクト

React Testing Library

React Testing Library は、React.js コンポーネントを実際に画面に表示しているかのようにテストできるライブラリです。
コンポーネントの状態や関数といった内部実装ではなく、画面に表示される内容やユーザーの操作を中心にテスト をするのが特徴です。

また React Testing Library は、あくまで ユーザー視点でのテストを重視 しており、実装の変更に強く保守性や拡張性の高いテストをする ことを目的としています。

Vitest・React Testing Library のインストールと基本的な使い方

それでは、ここから実際に Vitest・React Testing Library を インストール したり、コンポーネントで利用する 基本的な流れを見ていきましょう。

Vitest・React Testing Library のインストール

Vitest・React Testing Library を インストール します

  • D–save-dev の省略形で、パッケージは devDependencies(開発用依存) に追加される
  • vitest → テストの実行・アサーション・モックなどを提供するテストフレームワーク
  • @testing-library/react → Reactコンポーネントを「ユーザー視点」でテストするためのライブラリ
  • @testing-library/user-event → 実際のユーザー操作を再現するシミュレーションライブラリ
  • @testing-library/jest-dom → DOM(HTML要素)を直感的に確認できる matcher を expect に追加する拡張ライブラリ
  • jsdom → Node.js上でDOMを仮想的に再現する環境ライブラリ

Vitest の設定

vite.config.js にテスト設定を追加します

事前設定ファイルの作成

setupTests.js事前設定ファイル を作成する

Vitest・React Testing Library の基本的な使い方

テストするコンポーネントの作成

ボタンをクリックすると、1つずつカウントアップされる Buttonコンポーネント を作成

テストコードの作成

Vitest デフォルトの設定、*.test.* *.spec.* 自動でテスト対象 にするため、test フォルダ配下に、Button.test.jsxテストコードの作成

処理処理内容
render()コンポーネントを画面に表示しているように描画
screen.getByText()画面上のテキストを取得
userEvent.click()ユーザーがクリックした動作を再現
describe / itテストのグループと個別テスト
expect(...).toBeInTheDocument()要素が画面に表示されているかを確認

テストの実行

処理内容

  1. 対象のフォルダの場所で、「npx vitest run」のコマンドを入力し、実行
  2. DOMがコンソールに出力され、「クリック」、「カウント: 0」、「カウント: 1」が表示されていることを確認
  3. テストのグループ「Buttonコンポーネント」と個別テスト「初期表示では「カウント: 0」と表示される」、個別テスト「ボタンをクリックすると「カウント: 1」に増える」の表示と 検証がpassしている 事を確認

まとめ

React.js テスト について、JestVitestReact Testing Library とあわせて解説してきましたが、いかがでしたでしょうか?

テストを実行するツールである JestVitest と、 React.js コンポーネントを実際に画面に表示しているかのように確認できる React Testing Library を組み合わせることで、実装の変更に強く保守性や拡張性の高いテスト ができるようになります。

まずは Vitest React Testing Library の基本的な使い方をしっかり押さえ、小さな コンポーネント で試しながら、少しずつ 品質の高いコード で開発できるようになっていきましょう。

公式サイト

Vitest ※英語

Vitest
Next generation testing framework powered by Vite

React Testing Library ※英語

React Testing Library | Testing Library
React Testing Library builds on top of DOM Testing Library by adding
tachu × tachu

Laravel / React フルスタックエンジニア

Webエンジニア歴15年、フリーランス歴8年で、PHP / Laravel を中心に、
React.js / Vue.js を用いたフルスタックでのWeb開発をしています。

技術記事は Laravel / React / Web開発 を中心に書いています。

Webサービスの開発、既存システム改善、機能追加、技術相談、小規模な開発など、お気軽にご相談ください。

React.js / Next.js
シェアする

コメント

タイトルとURLをコピーしました