我应该如何键入服务的模拟对象?
假设我MyService
有someMethod
。
我像这样创建了MyService
的模拟:
let mockMyService = jasmine.createSpyObject('mockMyService', ['someMethod'])
我应该如何输入mockMyService
?
如果我将其键入MyService
,则打字稿compliler不会让我们遇到mockMyService.someMethod.and
答案 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