tho*_*zmz 6 typescript reactjs react-router-dom
我有一个假设的 React 组件,Component.ts其代码结构类似于:
import React from 'react';
import { useParams } from 'react-router-dom';
export const Guide = () => {
const { serviceId } = useParams();
return (
<p>{serviceId}</p>
)
}
Run Code Online (Sandbox Code Playgroud)
为了测试该组件的行为,我尝试在我的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();
});
Run Code Online (Sandbox Code Playgroud)
当我使用 的版本时,我的测试工作正常5.2.2,react-router-dom但自从我更新到6.0.0-beta.0. Jest 在运行测试时显示以下消息:
Relative pathnames are not supported in createMemoryHistory({ initialEntries }) (invalid entry: "guides/some-service-id")
Run Code Online (Sandbox Code Playgroud)
lik*_*mon 16
经过一番搜索,我在测试套件中找到了答案。
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());
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10399 次 |
| 最近记录: |