このテキストは、運営している韓国のブログを日本語に翻訳したものです。

韓国のブログ:https://yunsuu.notion.site/e379eccd32c545419f0651f743c12c13?v=35310b282de24cc5a292fe45cc498a32&pvs=74

 



アプリテストが必要な理由

アプリをテストする必要がある理由は、コーディングをするときに最も楽しい瞬間は、自分の作りたいプロジェクトを作るときです。しかし、最も面倒な瞬間は、自分が作ったプロジェクトにどんなバグがあるかをテストするときです。

また、実際にテストしても、自分のコンピュータではうまく動かないことがあります。まるでバグが一つもないかのようです。

そのため、テストしても、そこまで細かくできないようです。しかし、6か月間のSWマエストロコースを経て、この考え方はだんだん変わってきました。

協力して長期間にわたって実際のユーザーが使用する価値のあるソフトウェアを作ると、規模が大きくなる可能性があり、個人プロジェクトとは異なり、もしかしたら動かない部分があるかもしれないので、細心の注意が必要です。しかし、数多くの機能追加と数多くのビルドプロセスの中で、これを細心の注意を払ってチェックするのは簡単ではありません。実際の会社では、このようなテスト部分を担当している部署であるQA部署も存在します。

アプリのテストの必要性を感じる中、幸運にもシーケンスインターンプログラムを通じてReact Webテストを書いてみる機会がありました。直接テストコードを書きながら学んだことや感じたことを整理してこの文章を書くことにしました。

e2e test, unit test

テストにはさまざまな種類があります。

いや、テストをするなら一度だけすればいいのに、なぜこんなにも面倒くさいのか…と思いました。しかし、直接コードを書きながら、各テスト段階での役割や重要性を学ぶことができました。細かく分ければキリがないので、大まかに2つに分けてみましょう。

 

e2e test

e2eテストは、ユーザーがアプリを利用する際に目に見えるものをテストするプロセスです。例えば、ログインができない場合や、クリックすべきボタンが非活性化されている場合など、ユーザーが直接経験するエラーを確認するレベルです。これはテストの段階で、最もユーザーと直接関連する段階です。e2eテストをサポートする多くのソフトウェアがあるかもしれませんが、私はCypressを使用してe2eテストを書いてみました。

unit test

ユニットテストは、e2eテストと比較して、より低レベル(ユーザーよりもコードにより近い)のテストです。e2eテストがユーザーの目に見えるバグを確認するテストであるのに対し、ユニットテストはユーザーが見ることのできないウェブ/アプリの内部の詳細なデータまでテストが可能です。ユニットテストをサポートする多くのソフトウェアがありますが、私はReact Testing Libraryを使用してユニットテストを書いてみました。

Cypressを利用したe2etestを作成してみる

0_ru_HmY-6fP498VkF
 
Cypressは、Chromeブラウザの開発者ツールのように、作成したプロジェクトをテストすることができます。左側のウィンドウには、作成したテストコードが実行されるコンソールがあり、右側の画面では、作成したプロジェクトがテストコードに従って動作する様子を確認できます。

簡単なテストコードの例

Cypressは、CSSセレクタを使用してHTML上に表示されている要素を選択することができます。レンダリングされた私のプロジェクトのHTMLのタグ、クラス、IDの値を適切に選択してみましょう!

以下は、メールアドレスとパスワードを入力し、ボタンをクリックして"/success"にリダイレクトされるかどうかをテストするコードです。

こちらの公式ウェブサイトでは、さまざまな要素を選択する方法やさまざまなイベントを実行する方法など、さらに多くの情報が提供されています。興味がある場合は、Cypressの公式ウェブサイトを訪れてみてください。

React Testing Libraryを使用してユニットテストを書

リアクト テスティング ライブラリは Enzyme とは異なり、すべてのテストを DOM 中心で行います。これは、コンポーネントの props や state を直接参照せず、予想どおりの動作を確認するためです。そのため、予想どおりの動作であれば成功と見なされます。

また、Enzyme は様々な機能を提供しますが、リアクト テスティング ライブラリは必要な核心機能のみを提供し、軽量です。プロジェクトの規模が大きくなると、Enzyme を使用することが有利ですが、単純なプロジェクトではリアクト テスティング ライブラリを使用することが良い選択肢になるかもしれません。


ログインテストコードを作成してみよう

以下は、メールアドレスとパスワードを入力し、ボタンをクリックすると "/success" にリダイレクトされるかどうかをテストするコードです。理解を深めるために、react-router-domで提供されるuseHistory関数を使用してリダイレクトを確認するプロセスがあると考えてください。
 
ユニットテストは、E2Eテストよりもコードレベルに近いテストプロセスであるため、学習すべき内容がE2Eテストよりも多く、公式ドキュメントもより多く参照する必要があります。

実際のテストコードを書きながら感じたこと
インターンとして実際のテストコードを書きながら感じたことは、E2Eテストよりもユニットテストのテストコードを書く方がより難しいという点です。やはりユニットテストはコードレベルに近く、プロジェクトの構造をよく理解し、基本的なJavaScriptの知識も堅固でなければ、コードとピッタリと一致するテストコードを書くことができません。もしテストコードを一度書いてみたいと思っている人がいるなら、E2Eテストから学ぶことをお勧めします。