我正在使用Enzyme的shallow方法来测试一个组件,该组件使用useParams
钩子从URL参数中获取ID。
我试图模拟useParams
钩子,这样它就不会调用实际的方法,但它不工作。我仍然得到TypeError: Cannot read property 'match' of undefined
,所以它调用实际的useParams
,而不是我的模拟。
我的组件:
import React from 'react';
import { useParams } from 'react-router-dom';
export default () => {
const { id } = useParams();
return <div>{id}</div>;
};
字符串
测试:
import Enzyme from 'enzyme';
import Adapter from 'enzyme-adapter-react-16';
import React from 'react';
import Header from './header';
import { shallow } from 'enzyme';
Enzyme.configure({ adapter: new Adapter() });
describe('<Header />', () => {
jest.mock('react-router-dom', () => ({
useParams: jest.fn().mockReturnValue({ id: '123' }),
}));
it('renders', () => {
const wrapper = shallow(<Header />);
expect(wrapper).toBeTruthy();
});
});
型
谢谢你,谢谢
9条答案
按热度按时间6ojccjat1#
这对我来说很有用,可以模拟useParams并在同一个文件中更改每个单元测试的值:
字符串
只需在describe()之外将
useParams
声明为jest.fn()
,然后在每个单元测试中使用jest.spyOn
更改其值erhoui1w2#
我不知道为什么,在react-router库的文档中也找不到它,但在测试和实现中将
react-router-dom
更改为react-router
对我来说都是有效的。所以它变成了这样:
字符串
d6kp6zgx3#
我遇到过类似的问题,我是这样解决的:
字符串
xuo3flqw4#
我尝试了这个模拟,但它对我不起作用。错误:无法读取属性'match'的undefined。似乎组件不在路由器内,所以它不能用参数模拟匹配。它对我有效:
字符串
im9ewurl5#
您可能会错过按原样添加
react-router-dom
的其他键。字符串
7kjnsjlb6#
对于我的mocking react-router-dom修复问题:
字符串
syqv5f0l7#
我也遇到了同样的问题。我这样嘲笑useParams:
字符串
uz75evzq8#
我也有同样的问题。我嘲笑useParams像这样之前描述
字符串
hm2xizp99#
我也遇到了同样的问题。从“@testing-library/react”调用“cleanup”函数可以帮助我:
字符串