Next.jsでのNextRouterがマウントされていませんエラーの解決方法


Next.jsのエラーメッセージ「NextRouterがマウントされていません」は、Next.jsアプリケーションのコンテキスト外でuseRouterフックを使用した場合に発生することがあります。特に、useRouterフックを使用するコンポーネントをユニットテストする際にこのエラーが発生することがあります。

このエラーの解決方法としては、以下の方法があります。

  1. テストで使用する場合は、next/routerのuseRouter()フックをモック化することでルーターをモック化します。

例:

// テストファイルの先頭で次のコードを追加
jest.mock('next/router', () => ({
  useRouter: () => ({
    // 必要なプロパティやメソッドをここに追加
    push: jest.fn(),
    // ...
  }),
}));
  1. appディレクトリ内でuseRouterフックを使用している場合は、next/navigationからインポートされる新しいフックに移行します。

例:

import { useHref, useMatch, useResolvedPath } from 'next/navigation';
function MyComponent() {
  const router = useHref();
  // ...
}

上記の解決方法を試してみてください。これにより、「NextRouterがマウントされていません」エラーが解消されるはずです。