本セクションの目標

  1. テストコードを書くことの意義を理解する
  2. JS・TSのユニットテストの書き方と実行方法を理解する
  3. Vue.js(Nuxt.js)のユニットテストの書き方と実行方法を理解する

今回実施すること

  1. サーバーサイド・クライアントサイド両方のユニットテストのプログラミングを行う

なぜテストコードを書く必要があるのか

色々あるとは思うが平川は以下のように考えます

  • 技術的負債を減らしソースコードの品質を高めていく作業(リファクタリング)が容易になる
  • スプリントを回していく上でのデグレ防止
  • テストを自動化することによって、再現性のあるテストを可能とできること

(参考)テストピラミッド
https://dev.classmethod.jp/articles/testing_pyramid/

JS・TSのテストコードを書くために利用するライブラリ

  • jest
    • JS・TSをテストするためのライブラリ。デジ開発部ではjestを使うプロジェクトがほとんど。
    • https://jestjs.io/ja/
  • vue-test-utils
    • Vue.jsやNuxt.jsをjestを使ってテストするときに使用する。create-nuxt-app等のcliコマンドでプロジェクトを作成する際にjestを選択すると自動的にインストールされる。
    • https://vue-test-utils.vuejs.org/ja/
  • Mocha、Chaiなど
    • jestの他にも上記のようなテスティングツールがあります。気になる人は調べてみても良いかも。

テストコードが十分足りているかの判断材料

  • テストコードのカバレッジ
    カバレッジと言ってテストコードの網羅率を計算することが出来ます。
    100%の網羅が出来ればもちろん良いですが、難しいケースもあるのでチーム内で何%以上の網羅が出来てればOKとすると言ったルールを決めると良いと思います。

https://qiita.com/monisoi/items/44931e36c5f7b1f4e683
https://qiita.com/turmericN/items/e3e48f04800e8c0b723c

使用頻度の高いテスト関数

一つ一つ説明しても分からないと思うので紹介のみ

jest全般

  • describe
  • it
  • jest.fn
  • spyOn
  • jest.mock
  • mockReturnValue
  • mockResolvedValue
  • mockClear
  • beforeEach
  • afterEach
  • toEqual
  • toBeTruthy
  • toBeFalsy
  • toHaveBeenCalled
  • toHaveBeenCalledWith

vue-test-utils特有

  • shallowMount
  • toMatchSnapshot
  • trigger
  • find
  • findAll
  • setData
  • setValue

などなど

テストの実行方法

  1. CLIで実行
    • jestコマンドを実行するとテストができる。基本package.jsonにjestコマンドを実行するコマンドがあるので、それをターミナル上で実行する。
  2. vscodeの拡張機能を使ってGUI上で実行
    • 「jest runner」というvscodeの拡張機能が存在する。インストールするとGUIでテストを実行できる。

ライブコーディング&課題

  1. サーバーサイドのテスト(昨日作ってもらったTODOアプリを題材にテストコードを書いていきます)
    • ライブコーディング
      1. DynamoDBからデータを全件取得する機能のテスト
      2. DynamoDBにデータを追加する機能のテスト
    • 課題(出来るところまで)
      1. DynamoDBから単一の条件で検索する機能のテスト
      2. DynamoDBからデータを削除する機能のテスト(最低ここまではやりたい)
      3. DynamoDBのデータを更新する機能のテスト
      4. DynamoDBのデータを複数の条件で検索する機能のテスト
  2. クライアントサイドのテスト
    • ライブコーディング
      1. DOMのスナップショットテスト
      2. 画面遷移のテスト
      3. 画面描画時のテスト
      4. APIリクエストのテスト

参考URL
https://qiita.com/macotok/items/7756858b23a3816d3415
https://qiita.com/hrkzmaaa/items/72fb22a372f172326f31