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



我明白发生了什么:使用Jasmine监视没有对象的函数以及为什么它在TypeScript中不起作用。我也看到这个打字稿答案:https://stackoverflow.com/a/43532075/2548010。

不幸的是,这只能解决导入监视函数的情况。我正在测试一个接受函数的函数,并且我试图看到传递的函数是否使用正确的参数调用。

import { chowDown } from './file.ts';
interface Taco {
filling: string;
hasCheese: boolean;
isCrispy: boolean;
}
describe('chowdown', () => {
const eatTaco = (taco: Taco) => {};
const expectedTaco = {filling: 'ground beef', hasCheese: false, isCrispy: true};
it('eats the taco', () => {
chowdown(eatTaco);
expect(eatTaco).toHaveBeenCalledWith(expectedTaco);
});
});

我想做的是这样的

spyOn(eatTaco);
//or
spyOn(window, 'eatTaco');

我在网上找到的所有建议的解决方案实际上都不适用于这种罕见的间谍事件。有没有人对如何正确实际监视eatTaco有任何想法?

谢谢

eatTaco函数替换为以下间谍:

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

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

好的,我想通了。

eatTaco的声明必须从这里改变:

const eatTaco = (taco: Taco) => {};

对此:

const eatTaco = jasmine.createSpy();

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

最新更新