gpt4 book ai didi

reactjs - 如何使用 MemoryRouter 来测试 useParams 调用

转载 作者:行者123 更新时间:2023-12-05 08:22:17 34 4
gpt4 key购买 nike

我有一个名为 Component.ts 的假设 React 组件,其代码结构类似于:


import React, { FC } from 'react';
import { useParams } from 'react-router-dom';

export const Guide: FC<{}> = () => {

const { serviceId } = useParams();

return (
<p>{serviceId}</p>
)

}

为了测试该组件的行为,我试图在我的 Component.test.ts 文件中执行类似于以下内容的操作:


import React from 'react';
import { render } from '@testing-library/react';
import { Component } from './Component';
import { Route, MemoryRouter } from 'react-router-dom';


test('my Component test', async () => {

const someServiceId = 'some-service-id';

const { findByText } = render(
<MemoryRouter initialEntries={[`guides/${someServiceId}`]}>
<Route path='guides/:serviceId'>
<Guide />
</Route>
</MemoryRouter>
);

expect(await findByText(someServiceId)).toBeInTheDocument();

});

当我使用 react-router-dom5.2.2 版本时,我的测试工作正常,但自从我更新到 6.0.0- 后它失败了beta.0。 Jest 在运行测试时显示以下消息:

Relative pathnames are not supported in createMemoryHistory({ initialEntries }) (invalid entry: "guides/some-service-id")

最佳答案

经过大量搜索,我找到了答案 in the test suite .

6.0.0-beta.0 中的技巧是包装你的 <Route /><Routes /> 中.另请注意,组件是从 react-router 导入的而不是 react-router-dom :

import {
MemoryRouter,
Routes,
Route,
} from 'react-router';

test('my Component test', async () => {
const someServiceId = 'some-service-id';

const { findByText } = render(
<MemoryRouter initialEntries={[`guides/${someServiceId}`]}>
<Routes>
<Route path='guides/:serviceId'>
<Guide />
</Route>
</Routes>
</MemoryRouter>
);

await waitFor(() => expect(findByText(someServiceId)).toBeInTheDocument());
});

关于reactjs - 如何使用 MemoryRouter 来测试 useParams 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63801455/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com