Typescript + jasmine.createSpy()

时间:2017-06-21 08:15:16

标签: angular unit-testing jasmine

我正在使用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;}'.

getParamsMyService

的私有方法

我做错了什么?

3 个答案:

答案 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