トピック
- はじめに
- テストをはなぜ書く?
- そもそも「テストを書く」とは??
- テストの種類
- テストを始めるには
- テストの必要性を伝える難しさ
- さいごに
はじめに
本日は『フロントエンド開発のためのテスト入門』の著者であるTakepepeさんをお招きして、フロントエンドのためのテストの必要性と始め方についてお話ししていただきました!
トークイベントが始まる前から100人以上の方にスペースのリマインダーを設定していただき、運営メンバー一同だいぶ興奮しておりました。実際に今回のトークイベントは初めて参加人数が100人を突破し、あっつあつのトークイベントになりました!Takepepeさんと参加してくださった皆さんに心より感謝申し上げます!
テストはなぜ書くのか
では、早速本題へ。
まず、テストはなぜ書かなくてはならないのでしょうか?
一番の目的は、予期せぬ故障を防ぐためです!実際にコメントでも、テストを始めたきっかけとして「予期せぬ故障を経験して」ということを挙げている方がいましたね... 公開してバグってからじゃ遅いですものね!テスト大事!
そもそも「テストを書く」とは?
フロントエンドエンジニアの皆さんは「テストを書く」と当たり前のように言いますが、個人的に「テストを書く」という感覚が全くわかりませんでした。
ですが、今日のお話を聞いてやっとなんとなくイメージが掴めました!
まず「テストを書く」にはJestというテストのフレームワークを使うそうです。
そしてindex.jsというファイルがあったとしたら、テストのためのindex.test.jsを用意します。そこにJSやTSといった言語を用いてコードを書いていき、実際のブラウザ、もしくは仮想上のブラウザであるJSDOMにてテストをしていきます。
ちなみにテストを行う場所の選択方法としては、基本的にはJSDOMの方が速いそうです。ただ、実際のブラウザ上でテストすべき例として、CSSは実際のブラウザでないと確認できない部分が多いそうです。(なぜなのかちょっとよくわからなかった...)
それ以外のロジックだけ確認するような処理はJSDOM上が良いとのことでした!
ブラックボックステストという機能や関数の中身の処理には着目せず、ユーザーからみた振る舞いだけを確認するテストにおいては、storybook (https://storybook.js.org/)というツールを使うことが多いそうです。動作が行われた時に振る舞いをキャプチャして、正常時の振る舞いとバグが起きた時の振る舞いを見比べることができたり、バグが起きた時に自動的に通知も送ることができるそうで、すごすぎる!
テストの種類
テストの種類には、先述したブラックボックステストの他に、単体テストやホワイトボックステストがあります。
ホワイトボックステストは、モジュールの中の関数の中の処理が正しく動作するかをテストするものですが、ホワイトボックステストは単体テストの中に含まれるそうです。
テストを始めるには
テストを始めたいという方は、この単体テストから始めるのがおすすめだそうです!
第一引数と第二引数を足す(1+1=2)といった簡単な処理からテストを絡めていくのが良きだそうです。
テストのメリデメ
Takepepeさん曰く、実際にプロジェクトでは「テストなんて書かなくていい」と言われてしまうことが多々あるそうです。
でも最初にもあった通り、公開されてからバグに気づくでは遅い!
テストを書きながら正しい挙動をするという証拠を残すことができるのは、テストを書く大きなメリットですよね。ただ、書きながら未然にバグが防げたよ!とわかるのはテストを書く本人だけだそうで、少しテストの切なさも感じました笑
またテストを書いておけば、運用者が変わって万が一処理に異常が出てもすぐに気づくことができるというのもメリットです。
なので、「そんな運用がメインのサイトじゃなかったらテストいらないでしょ」と言わず、どんなプロジェクトにおいてもテストを書いておくことが大事だと思いました。
ただ、逆にテストを書くことで、(当たり前ですが)その分コストが増えたり、大きなリニューアルなどがあれば、それにしたがってテストも書き直さなくてはならない時があるというのはデメリットのようにも思えます。
だからこそ、どこにテストを書くかが重要です!!
壊れる不安があるところや、壊れたら困る場所を重点的にテストを書くことが重要だそうです!Takepepeさん曰く、これが「テストの効率」です!かっこいい.....
さいごに
トークイベントの振り返りとなるレポートを初心者の私なりにまとめてみました!(本当はもっとたくさんお話ししてくださったのですが、これより深そうな話は呪文....)
もっとテストを勉強したい!という方は、Takepepeさんの『フロントエンド開発のためのテスト入門』を読んでいただければと思います!
ただ今までテストに関して全く無知だった私ですが、Takepepeさんがとってもわかりやすく説明してくださったおかげでテストをざっくりと理解できました!
テストの重要性を身にしみて感じましたね....
そしてテストの始め方もイメージができたので、ぜひ挑戦してみたいです!
お忙しい中、快くゲストを引き受けてくださったTakepepeさん、本当にありがとうございました!
皆さんも、お仕事終わりに(もしかしたら途中に)ご参加いただき、本当にありがとうございました!
次回のトークイベントは、5/17(水)21時〜を予定しております!
ぜひご参加いただけると幸いです!