nextjs-middleware-vitest-jsdom

Installation
SKILL.md

Next.js Middleware Testing in Vitest/jsdom

Problem

When testing Next.js middleware with Vitest using the jsdom environment, NextResponse.next({ request: { headers: request.headers } }) throws:

Error: request.headers must be an instance of Headers
 at handleMiddlewareField node_modules/next/src/server/web/spec-extension/response.ts:18:13
 at Function.next node_modules/next/src/server/web/spec-extension/response.ts:150:5

Context / Trigger Conditions

  • Testing middleware.ts that calls NextResponse.next() or NextResponse.redirect()
  • Using Vitest with environment: 'jsdom' (common default for Next.js projects)
  • NextRequest constructs fine, but NextResponse.next() fails
  • The error occurs at the instanceof Headers check inside Next.js internals
Related skills
Installs
1
First Seen
Apr 16, 2026