reactjs - 单元测试 TypeError:_reactRouterDom.useHistory.mockReturnValue 不是函数
问题描述
我尝试使用打字稿实现的反应组件编写单元测试,但是在模拟某些钩子函数时出现错误。
我的单元测试工具:
import React from 'react';
import { useHistory } from 'react-router-dom';
import { MyComponent } from './index';
jest.mock('react-router-dom', () => ({
...jest.requireActual('react-router-dom'),
useHistory: () => ({ replace: jest.fn() ]),
}));
describe('MyComponent', () => {
it('Should pass', () => {
// My render implementation
(useHistory as jest.Mock).mockReturnValue({ pathname: '/test' });
});
});
当我运行测试用例时,它会抛出一个错误:
TypeError:_reactRouterDom.useHistory.mockReturnValue 不是函数
解决方案
您已经分配了一个匿名函数,useHistory
而不是由jest.fn()
. .mockReturnValue()
方法存在于jest.fn()
. 尝试:
import { useHistory } from 'react-router-dom';
jest.mock('react-router-dom', () => ({
...(jest.requireActual('react-router-dom') as object),
useHistory: jest.fn(),
}));
describe('MyComponent', () => {
test('should pass', () => {
(useHistory as jest.Mock).mockReturnValue({ location: { pathname: '/test' } });
const history = useHistory();
expect(history.location.pathname).toBe('/test');
});
});
推荐阅读
- python - 为低于或超过列中指定的最小值/最大值的值过滤数据框
- python - python ldap中的身份验证
- php - 如何在不刷新的情况下执行 jquery ajax 来重新加载我的数据
- javascript - 无法使用 datefns 解析日期
- reactjs - 如何在不重新渲染 Next.js 的情况下更改路线?
- python - 从python数据框中的文本列中获取唯一时间戳的计数
- javascript - 按每个列表有多少值对列表列表进行排序
- ios - UIButton 有阴影旋转没有阴影旋转
- arrays - 在 Fortran 中创建包含其他声明变量的数组
- python - 递归函数有问题(Python)