使用 Jasmine 监视 TypeScript 中没有对象的非导入函数
Using Jasmine to spy on a non-imported function without an object in TypeScript
我了解发生了什么:Using Jasmine to spy on a function without an object and why it doesn't work in TypeScript. I also see this TypeScript answer: 。
不幸的是,这只能解决导入的监视函数的情况。我正在测试一个接受函数的函数,我试图查看传入的函数是否使用正确的参数调用。
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');
我在网上找到的 None 个提议的解决方案实际上适用于这种罕见的间谍事件。有没有人知道如何正确地监视 eatTaco
?
谢谢
好的,我明白了。
eatTaco
的声明必须从这里更改:
const eatTaco = (taco: Taco) => {};
对此:
const eatTaco = jasmine.createSpy();
这仍然适用于 TypeScript,而且 Jasmine 足够聪明,可以正确处理 toHaveBeenCalledWith(...)
而无需打字。你在这里确实失去了一点类型安全,但只要你在实际代码中声明了类型——你的测试在技术上不需要它。
用以下间谍替换 eatTaco
函数:
const eatTaco = jasmine.createSpy<(taco: Taco) => void>();
这个 TypeScript 泛型让你输入安全。
我了解发生了什么:Using Jasmine to spy on a function without an object and why it doesn't work in TypeScript. I also see this TypeScript answer: 。
不幸的是,这只能解决导入的监视函数的情况。我正在测试一个接受函数的函数,我试图查看传入的函数是否使用正确的参数调用。
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');
我在网上找到的 None 个提议的解决方案实际上适用于这种罕见的间谍事件。有没有人知道如何正确地监视 eatTaco
?
谢谢
好的,我明白了。
eatTaco
的声明必须从这里更改:
const eatTaco = (taco: Taco) => {};
对此:
const eatTaco = jasmine.createSpy();
这仍然适用于 TypeScript,而且 Jasmine 足够聪明,可以正确处理 toHaveBeenCalledWith(...)
而无需打字。你在这里确实失去了一点类型安全,但只要你在实际代码中声明了类型——你的测试在技术上不需要它。
用以下间谍替换 eatTaco
函数:
const eatTaco = jasmine.createSpy<(taco: Taco) => void>();
这个 TypeScript 泛型让你输入安全。