📚
【next-router-mock】Storybookでnext/routerをモックする方法
前提条件
- 手段としては、
storybook-addon-next-router
というstorybookのアドオンも提供されているようですが、今回は、next-router-mock
を利用したやり方を紹介しています。
依存関係
-
next
: v14 -
react
: v18 -
@storybook/nextjs
: v8 -
next-router-mock
: ^0.9.7
結論
next-router-mock
を使って、next/router
をモックする
main.ts
// ... 省略 ...
webpackFinal: async (config) => {
config.resolve!.alias = {
// ... 省略 ...
'next/router': 'next-router-mock', // ここにライブラリのモックを追加
}
return config
},
// ... 省略 ...
以上、すごく簡単です!
next/router
をモックした背景
今回storybookのPlay functionでインタラクションテストを行っていました。
そこで、URLパラメータを扱うコンポーネントを持っており、パラメータのステータス監視を行っていました。
sample.tsx
import { useRouter } from 'next/router'
// ... 省略 ...
const router = useRouter()
// ... 省略 ...
useEffect(() => {
if (router.isReady) {
// パラメータ保持された時の処理
}
}, [router.isReady])
// ... 省略 ...
上記のようなコンポーネントをStorybookのPlay functionでテストするときに、以下のようなエラーが発生したため、モックを行う必要があります。
さいごに
今回はnext-router-mock
を用いてStorybookで扱うnext/router
をモックする方法を紹介しました。
利用バージョンや環境によって最適なモック方法は異なるかと思いますが、私が開発を進めていた環境ではテストでjest
を使っており、そこでのモックにも利用していたnext-router-mock
をstorybookでも利用する形で採用しました。
参考にした記事
Discussion