我正在使用Typescript
为我的角项目编写单元测试当我尝试为某些服务创建模拟时,我使用这种方式:
const serviceMock = <IMyService>{
method: _.noop,
};
beforeEach(inject($injector => {
testingService = new AccountingService(serviceMock);
spyOn(serviceMock, 'method').and.callFake(()=>'hello');
}
这可行
但是当我尝试使用jasmine.createSpy()
时,我遇到了编译错误:
const serviceMock = <IMyService>{
method: jasmine.createSpy('method').and.callFake(()=>'hello'),
};
Type '{ method: Spy;}' cannot be converted to type 'MyService'. Property 'getParams' is missing in type '{ method: Spy;}'.
但getParams
是MyService
我做错了什么?
答案 0 :(得分:4)
尝试使用映射类型
export type Spied<T> = {
[Method in keyof T]: jasmine.Spy;
};
并使用它来模拟你的服务
const serviceMock = Spied<IMyService>{
查看here以获取详细说明
答案 1 :(得分:2)
使用Jasmine SpyObj<T>
已定义和使用的类型。
const serviceMock: jasmine.SpyObj<IMyService> = jasmine.createSpyObj<IMyService>('service',['method']);
这样,IMyService的每种方法都将被间谍程序增强:
serviceMock.method.and.callFake(()=>'hello');
答案 2 :(得分:1)
尝试使用部分类型:
const serviceMock = <Partial<IMyService>>{
有关详细信息,请查看:https://www.typescriptlang.org/docs/handbook/advanced-types.html