javascript - 如何使用 jest 在 reducer 中模拟一个函数
问题描述
我有一个减速器说做这样的事情:
return {
...state,
result: myResult(valA, valB)
}
并且myResult
函数在reducer上面的同一个文件中定义
目前我的测试失败,因为我传入的值myResult
是未定义的
如何使用 jest 模拟此功能?
我知道我可以这样做:
const myMock = jest.fn()
myMock.mockReturnValueOnce(10)
但是我如何具体告诉测试文件它应该在主文件中模拟哪个实际功能?
我觉得我想做类似的事情
import { myResult } from './index'
myResult = jest.fn()
myResult.mockReturnValueOnce(someObject)
但我不确定这是否可行,因为测试减速器的方法是拥有一个初始对象,一个预期的对象结果,然后通过一个动作。而我要测试的函数属于reducer中的结果对象键
那有意义吗?
解决方案
我通常做的事情如下:
首先,我在需要我正在测试的类之前模拟我的对象:
jest.doMock('dependancy', () => {
return {
doSomething: () => {
return {
set: jest.fn(),
get: jest.fn()
};
}
};
});
然后在执行时我提取传递给模拟的参数,例如
myObject.myFunction(extension);
expect(dependancy.get).toHaveBeenCalled();
const callback = dependancy.get.mock.calls[0][1];
然后只需自己执行回调并提取任何其他参数或将任何其他模拟传递给回调参数。
callback(undefined, undefined);
希望这可以帮助。
推荐阅读
- validation - 基于 ASP.NET Core MVC 中的控制器操作的对象状态验证
- c# - 缓存类 - 需要设计建议
- python - 如何在另一个函数中调用一个函数进行计算?
- c# - 系统或配置设置的外部控制 (CWE ID 15)
- elasticsearch - 单个查询中的弹性搜索 1000 个布尔条件未给出结果
- amazon-web-services - 在 Glue 中使用 ResolveChoice
- php - 在 PHP 中识别 PDF/A 文件
- python - 外星人入侵高分和分数问题
- cassandra - 在同一 Docker 下运行的客户端中的 Docker Cassandra 访问
- typescript - 输入 express &nestjs,启动项目报错