网站搜索

TypeScript - 如何模拟具有不同返回值类型的函数?


我在 NodeJS 上使用 Jest 编写单元测试。有一个方法可以返回一个实体或实体数组。当我尝试模拟这个方法的返回值时,我只能传递数组,但我需要一个实体。

npm i jest typeorm
const manager = new EntityManager(null);
const sale = new Sale();
jest.spyOn(manager, 'create').mockReturnValue(sale);  

最后一个字符串导致错误:类型 'Sale' 的参数不可分配给类型 '{}[]' 的参数。类型 'Sale' 缺少类型 '{}[]' 的以下属性:length、pop、push、concat,以及其他 26 个属性。

答案#1

你可以使用 withArgs 来实现这一点,

withArgs(…args) →

指定用于调用具有指定参数的间谍的策略

例如:

spyOn(something, 'func').withArgs(arg1).returnValue(obj);

然后又用不同的 returnValue 对 spyOn 进行不同的设置

spyOn(something, 'func').withArgs(arg2).returnValue(arrayValue);