コミューン株式会社の土佐(@whale9490)です。
私たちは現在、溜まった技術負債を一掃するため、大規模リファクタリングプロジェクトを進行しています。
大規模リファクタリングを安全かつ高速に行うには、できるだけ網羅的な自動テストがあることが望まれます。私たちのバックエンドコードは、E2Eテスト・APIテスト・ユニットテストなど様々なレイヤのテストを持ってはいましたが、それらいずれも網羅的ではありませんでした。
そこで、APIテストを網羅的に書こう、ということに決まったのですが、すべてのAPI(数百エンドポイントあります)に対して手でテストを書いていると、私たちの望む短期間では到底終わらないことがすぐに分かりました。
この問題を解決するため、APIスナップショットテストを作ることにしました。
- 目指した着地点
- 方針
- Jestのスナップショットテスト機能を使う
- テストデータは、データジェネレータにより自動生成して全テストで共通のものを使う
- テストのインプットはHTTPリクエストとし、実際のリクエストのパターンを基に自動生成する
- テストのアウトプットはHTTPレスポンス・DBデータ差分・外部依存モックへのアウトプットとする
- テストコードは、ts-morphで自動生成する
- 結果