假设我们有一个名为Method1
的方法,该方法接受和反对
obj={ name: 'jack', phone: '123' }
如您所见,这里有两个属性,名称和电话。
Method1在内部以obj.phone
作为参数调用Method2。
export class AppComponent {
method1(obj: any) {
this.method2(obj.phone);
}
method2(val) {
}
}
我想检查method2是否被调用,以及是否向其传递了正确的参数。在这种情况下,它将始终是obj的phone属性。
callFake()是解决方案吗?我该怎么办?
无效的代码:
it('should do something', () => {
let obj = { name: 'jack', phone: '123' }
let passedarg;
let spy = spyOn(subject, 'method2').and.callFake(function (arg) {
passedarg = arg;
});
expect(obj).toHaveBeenCalledWith(obj.phone);
});
答案 0 :(得分:1)
我不确定您当前正在测试什么。您是否检查method2
是通过对象的phone
属性作为method1
的参数传递来调用的?
当前在测试中,您监视method2
并提供模拟实现(callFake)。然后,您断言已使用其拥有的obj
属性调用了JavaScript对象phone
。您需要调用函数本身subject.method1(obj)
,然后才能查看是否调用了间谍程序。
如果这是您要实现的目标,我认为这可能是您想要的:
it('should do something', () => {
let obj = { name: 'jack', phone: '123' };
spyOn(subject, 'method2');
subject.method1(obj);
expect(subject.method2).toHaveBeenCalledWith(obj.phone);
});