我正在用Jest写测试,我遇到了来自React-Router-DOM的Outlet
的问题。
我有一个名为Preferences
的组件,它嵌套在另一个路由器中。在Preferences
中,我有5个子路由:
{/* Route for Preference. */}
<Route
path="/preferences"
element={<LazyComponent component={'LazyPreferences'} />}
>
<Route index element={<LazyComponent component={'LazyAccount'} />} />
<Route
path="accounts-1"
element={<LazyComponent component={'Account-1'} />}
/>
<Route
path="accounts-2"
element={<LazyComponent component={'Account-2'} />}
/>
<Route
path="accounts-3"
element={<LazyComponent component={'Account-3'} />}
/>
</Route>
字符串
在Preferences
组件中,我从React-Router-DOM中使用Outlet
,如下所示:
const Preferences = () => {
return (
<Provider>
<PreferencesMenu />
<Outlet />
</Provider>
)
}
型
当我模拟Preferences
组件时,它只显示Preferences
导航。我如何处理像Account-1,.这样的子组件?
这是我的测试
describe('Preferences screen with Account', () => {
beforeEach(cleanup)
afterEach(() => {
jest.clearAllMocks()
})
test('Click on the Account option, router will navigate to /accounts', async () => {
const wrapper = mountWithApp(<Preferences />)
expect(wrapper).toContainReactText('ACCOUNT')
await userEvent.click(screen.getByText('ACCOUNT'))
expect(mockedUseNavigate).toHaveBeenCalledWith('/preferences/accounts')
})
})
型
1条答案
按热度按时间izj3ouym1#
由于导航菜单正在显示,您只需在菜单项上创建单击事件即可导航到插座路由。因此,您可以在导航后测试插座组件是否显示在文档上。
要使用
<Outlet />
组件,您需要使用<MemoryRouter />
渲染<Preferences />
:字符串
此外,您似乎一直在使用自定义匹配器和函数,您可以使用
render
和getByText
/getByRole