我该如何键入模拟对象

时间:2017-08-17 16:22:58

标签: typescript jasmine karma-jasmine

我应该如何键入服务的模拟对象?

假设我MyServicesomeMethod。 我像这样创建了MyService的模拟:

let mockMyService = jasmine.createSpyObject('mockMyService', ['someMethod'])

我应该如何输入mockMyService

如果我将其键入MyService,则打字稿compliler不会让我们遇到mockMyService.someMethod.and

3 个答案:

答案 0 :(得分:1)

我自己也在想这个问题,虽然这可能不是正确的方法,但在定义服务的模拟/间谍类型时,我采用了以下方法。

const mockMyService: jasmine.SpyObj<MyService> = jasmine.createSpyObject('mockMyService', ['someMethod']);

我已经能够继续并在需要时重置此间谍的电话,而不会受到编译器或Sublime的任何投诉。

mockMyService.someMethod.calls.reset();

答案 1 :(得分:-1)

首先,根据documentation,它是不是createSpyObj而不是createSpyObject

但是它声明它将Spys作为其成员返回一个对象:

  

(静态)createSpyObj(baseNameopt,methodNames)→{Object}

     

创建一个以多个Spys为成员的对象。

所以它不是直接的jasmine.Spy对象,而是{ [key: string]: jasmine.Spy }类型的对象。

let mockMyService: { [key: string]: jasmine.Spy } = jasmine.createSpyObj('mockMyService', ['someMethod']);

但是,如果你只监视一种方法,你可以简单地做:

let mockMyService: jasmine.Spy = createSpy('mockMyService', 'someMethod');

希望我能提供帮助。

答案 2 :(得分:-1)

您可以通常的方式输入模拟:

let mockMyService: MyService = jasmine.createSpyObj('mockMyService', ['someMethod']);

当您尝试将其方法用作间谍时,您所看到的问题是您还没有告诉TypeScript他们是间谍,请尝试:

(mockMyService.someMethod as Spy).and.returnValue(...);
                       // ^ note