javascript - 如何开玩笑地模拟函数或防止默认值?
问题描述
我正在尝试使用 react-testing-lib 进行一些集成测试
我想模拟我的反应类中的一个函数,称为handleSubmit
handleSubmit(){
// does some stuff
// calls an action creator
}
我基本上想存根这个方法,以便它返回null
/undefined
或任何东西。但我不希望它真正调用动作创建者
原因是我想断言一些 UI 存在并且调用动作创建者给了我错误:
动作必须是普通对象。使用自定义中间件进行异步操作。
我也尝试过jest.mock(thismethod)
jest.spyOn()`,但似乎都不起作用。我只是想让它做类似的事情
myFunc() {
}
好像它是一个空函数并且什么都不做。我该如何存根?
解决方案
它看起来像是handleSubmit
一个原型方法......如果是,那么你可以像这样模拟它:
import * as React from 'react';
import { render, fireEvent } from 'react-testing-library';
class MyComponent extends React.Component {
handleSubmit() { // <= prototype method
throw new Error('should not get here');
}
render() {
return (<button onClick={this.handleSubmit}>the button</button>);
}
}
test('MyComponent', () => {
const mock = jest.spyOn(MyComponent.prototype, 'handleSubmit');
mock.mockImplementation(() => {}); // <= replace the implementation
const { getByText } = render(<MyComponent/>);
fireEvent.click(getByText('the button'));
expect(mock).toHaveBeenCalled(); // Success!
});
只需确保在渲染组件之前在原型上实现模拟。
推荐阅读
- python - TensorFlow 二进制文件经过优化,可在性能关键操作中使用以下 CPU 指令:AVX2 FMA
- postgresql - Postgres函数更新旧数据和插入新数据
- powerapps - PowerApps 筛选器 - 表名作为变量
- c# - 忽略来自 ImageResizer 的 gif 文件
- javascript - onmouserover() 出现错误:分配给右值
- php - 如何解决“内爆():传递的参数无效”?
- python - 即使每个 csv 文件为空,如何使用 read_csv ?蟒蛇熊猫
- javascript - ChartJS 条上的完整边框
- java - 为什么我不能使用 .jar 文件中的 URL 路径来检测它是否是目录?
- c# - 如何在 ASP.Net MVC 中实现“导航堆栈”?