在我想要测试的组件中,我使用了useLocation
钩子。在组件中,我有:
function Test() {
const history = useHistory();
const location = useLocation();
const query = new URLSearchParams(location.search).get('value');
return <div > Welcome < /div>
}
为了测试该组件,我编写了以下测试:
jest.mock('react-router-dom', () => ({
useLocation: jest.fn().mockReturnValue({
pathname: '',
search: 'value',
hash: '',
state: null,
key: '5nvxpbdafa',
}),
}));
jest.mock('react-router-dom', () => ({
useHistory: () => jest.fn().mockReturnValue({
push: jest.fn(),
}),
}));
describe(' page test', () => {
test('should render', () => {
render(<Test />);
const title = screen.getByText(/welcome/i);
expect(title).toBeInTheDocument();
});
})
尝试这个我得到TypeError: (0 , _reactRouterDom.useLocation) is not a function
。为什么我得到这个错误?如何正确地编写测试以避免错误?
2条答案
按热度按时间knpiaxh11#
你最好不要模仿
react-reouter-dom
和useLocation
钩子的实现,而应该用MemoryRouter把你的组件用initialEntries Package 起来进行测试:历史堆栈中的位置数组。这些可能是具有{ pathname,search,hash,state }或简单字符串URL的成熟位置对象。
例如
index.tsx
:index.test.tsx
:结果:
nfg76nw02#
这就是我如何实施的,它对我很有效。