gpt4 book ai didi

typescript - 如何解决类型 'calls' 上不存在 '() => any'

转载 作者:搜寻专家 更新时间:2023-10-30 20:34:56 25 4
gpt4 key购买 nike

正在测试我的 angular2 应用程序。我尝试设置一个 spy ,然后检查它被调用了多少次。不过我一直收到这个 TS 错误

Property 'calls' does not exist on type '() => any'.

我该如何解决这个错误?

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);


});
});

最佳答案

看起来 SshRefService 当前定义了 getClient() : any。结果,它正确地抛出了这个错误。发生这种情况是因为模拟过程用 Spy 替换了属性/方法,但 Typescript 无法知道发生了什么。

既然你已经在监视 SshRefService.getClient ,你有两种方法来测试它是否被调用:

spyOn 返回一个 jasmine.Spy 对象,它直接暴露调用属性。您可以在示例对象上保存 spyOn(ref, 'getClient').and.returnValue(true) 的结果,然后像这样测试它:

expect(getClientSpy.calls.count()).toEqual(1)

首选(可能):您可以在对象本身的方法上运行 expect,如下所示:

expect(ref.getClient).toHaveBeenCalledTimes(1)

关于typescript - 如何解决类型 'calls' 上不存在 '() => any',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42259813/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com