测试我的angular2应用。我尝试设置一个间谍,然后检查它被调用了多少次。我不断收到这个TS错误
属性'call'在类型'()=>上不存在任何”。
如何解决此错误?
describe('ssh Service', () => {
let ref:SshRefService;
beforeEach(() => {
TestBed.configureTestingModule({
providers: [
{ provide: SshRefService, useClass: refClass },
]
});
});
beforeEach(inject([SshRefService], (sshRef:SshRefService) => {
ref = sshRef
spyOn(ref, 'getClient').and.returnValue(true)
}));
it('should mock an observable', () => {
//service.list() calls ref.getClient() internally
expect(service.list('/share')).toEqual(Observable.of(mockFileList));
expect(ref.getClient.calls.count()).toBe(1);
});
});
答案 0 :(得分:4)
看起来SshRefService
目前定义getClient() : any
。结果,它正确地抛出了这个错误。这是因为模拟过程用Spy替换了属性/方法,但是Typescript无法知道发生了什么。
既然您已经监视SshRefService.getClient
,那么您有两种方法可以测试它是否被调用:
spyOn
返回一个jasmine.Spy
对象,它直接公开calls属性。您可以将spyOn(ref, 'getClient').and.returnValue(true)
的结果保存在示例对象上,然后进行测试:
expect(getClientSpy.calls.count()).toEqual(1)
首选(可能):您可以对对象本身的方法运行expect,如下所示:
expect(ref.getClient).toHaveBeenCalledTimes(1)