使用Jasmine监视TypeScript中没有对象的非导入函数

使用Jasmine监视TypeScript中没有对象的非导入函数,typescript,unit-testing,jasmine,karma-jasmine,Typescript,Unit Testing,Jasmine,Karma Jasmine,我理解在中发生了什么:以及为什么它在TypeScript中不起作用。我还看到了这个类型脚本的答案: 不幸的是,这只解决了导入间谍函数的问题。我正在测试一个接受函数的函数,并且我试图看到传入的函数是用正确的参数调用的 从'/file.ts'导入{chowDown}; 接口塔可{ 填充:字符串; hascese:布尔型; isCrispy:布尔; } 描述('chowdown',()=>{ const-eatTaco=(taco:taco)=>{}; const expectedTaco={fill

我理解在中发生了什么:以及为什么它在TypeScript中不起作用。我还看到了这个类型脚本的答案:

不幸的是,这只解决了导入间谍函数的问题。我正在测试一个接受函数的函数,并且我试图看到传入的函数是用正确的参数调用的

从'/file.ts'导入{chowDown};
接口塔可{
填充:字符串;
hascese:布尔型;
isCrispy:布尔;
}
描述('chowdown',()=>{
const-eatTaco=(taco:taco)=>{};
const expectedTaco={filling:'ground beef',hascese:false,isCrispy:true};
它('吃玉米卷',()=>{
chowdown(eatTaco);
期望(eatTaco)。与(expectedTaco)一起被收集;
});
});
我想做的是

spyOn(eatTaco);
//或
spyOn(窗口“eatTaco”);
我在网上找到的建议解决方案中,没有一个真正适用于这一罕见的间谍事件。有没有人知道如何正确地监视
eatTaco


谢谢

好的,我想好了

eatTaco
的声明必须改变:

const-eatTaco=(taco:taco)=>{};
为此:

const eatTaco=jasmine.createSpy();

这仍然适用于TypeScript,Jasmine足够聪明,可以正确处理
,在没有打字的情况下使用(…)
调用。在这里,您确实会失去一些类型安全性,但只要您在实际代码中声明了类型,您的测试在技术上并不需要它。

用以下spy替换
eatTaco
函数:

const eatTaco = jasmine.createSpy<(taco: Taco) => void>();
const eatTaco=jasmine.createSpy void>();

此TypeScript泛型可确保键入安全。

太棒了!谢谢你的类型安全