如何在Jasmine中模拟柯里化函数?附示例方法代码
可以用Jasmine模拟这类方法
当然可以。这类方法的特点是接收参数后返回另一个函数,Jasmine的spyOn和自定义返回值能力完全能处理这种场景。
具体实现步骤
模拟方法并指定返回函数
假设doSmth属于MyClass类的实例,你可以这样模拟它,让它返回自定义逻辑的函数:const myInstance = new MyClass(); spyOn(myInstance, 'doSmth').and.returnValue((data: Data<T>) => { // 按需写返回逻辑,比如根据data的属性判断结果 return data.isValid; });验证调用与返回函数的执行
既能验证doSmth本身的调用情况,也能检查返回函数的执行结果:// 获取doSmth返回的函数 const returnedFn = myInstance.doSmth(someEventDescriptor); // 执行返回的函数 const result = returnedFn(testData); // 验证doSmth被正确调用 expect(myInstance.doSmth).toHaveBeenCalledWith(someEventDescriptor); // 验证返回函数的执行结果符合预期 expect(result).toBe(true);适配不同测试场景
不同测试用例里可以让doSmth返回不同逻辑的函数,直接修改returnValue里的内容即可:// 模拟返回始终返回false的函数 spyOn(myInstance, 'doSmth').and.returnValue(() => false);
补充说明
如果doSmth是全局函数而非类方法,直接用jasmine.createSpy创建模拟:
const mockDoSmth = jasmine.createSpy('mockDoSmth').and.returnValue((data: Data<T>) => true);
内容的提问来源于stack exchange,提问作者shizz
相关产品推荐
相关产品推荐

