开发者问题收集

在 Next 13 应用程序目录中模拟动态路由参数

2023-08-30
1590

我正在使用 Jest 和测试库在我的 NextJS 应用上运行单元测试,但很难弄清楚如何在动态路径上呈现页面。

对于我的页面/组件:

export default async function MyPage({ params }: { params: { id: string }}) {
    return (<p>{params.id}</p>)
}

尝试运行测试时:

import { render, screen } from '@testing-library/react';
import MyPage from './page'

it('renders', () => {
    render(<MyPage params={{ id: 'test' }} />)
    expect(screen.findByText('test')).toBeTruthy()
}

我收到以下错误:

TypeError: Cannot destructure property 'params' of 'undefined' as it is undefined.

如何定义 params 对象来呈现此组件?我尝试在此示例中将其作为普通 prop 传入,但我也尝试模拟路由器并强制使用 params 属性,但没有成功。有没有人成功模拟在 应用程序目录结构下的动态路由 中填充的 params 对象?

2个回答

不带 RSC 或应用程序路由器功能

it('should render', async () => {
  render(
    <Suspense>
      <Page params={{ username: 'DN' }} />
    </Suspense>
  );
});

带 RSC 或应用程序路由器功能

it('should render', async () => {
  render(await Page({params: {username: 'DN' }}))
});
Darshan Naik
2023-10-21

测试中的 render 函数调用看起来不正确(缺少结束符 >

已将其修复为:

render(<MyPage params={{ id: 'test' }} />)
Robin Thomas
2023-09-02