忙しい人向け
Route Handlerとテスト
Route Handler は Next.js の App Router から追加された概念で、Pages Router における API Routes に近い概念です。HTML を返す page.tsx
等とは違い、JSON 等を返します。
具体的に Route Handler は以下のような書き方をします。
よってテストはこのメソッドについての挙動を確認すれば良いので、以下のようになります。
Requestの生成
Mock Request の生成には外部ライブラリ等を使用しないと複雑なのではと勝手に思っていましたが、シンプルに new
で Request インスタンスを作成してやれば良いようです。
NextRequestを利用する
Next.js の Route Handler において実際に第一引数として渡されるオブジェクトは NextRequest であり、Cookie や request.nextUrl.searchParams
等の追加データを扱うことを可能にします。NextRequest は Request クラスを継承しているため、Request 型で実装しているエンドポイントに対しても NextRequest を渡すことが可能です。
これといった理由が無い限り NextRequest でテストした方が良いです。コンストラクタの形についても互換性を保っているため、Request を NextRequest に置き換えるだけで移行できます。
クエリ文字列を利用する
生成する Request にクエリ文字列の情報を含めるには、シンプルに URL をクエリ文字列を含むものに変更します。
後者の書き方でも最終的なURLは前者のURLになるのでどちらでも良いのですが、個人的には後者の方が読みやすいし編集しやすいので好きです。
最終的な成果物
余談
テストを定義しておくとリファクタリングの時の安心感が段違いでとても良い
逆にテストを修正するときは神経がすり減る