Javascript 角度单元测试:如何检查spied-On方法是否得到正确的参数?
假设我们有一个名为Javascript 角度单元测试:如何检查spied-On方法是否得到正确的参数?,javascript,angular,typescript,jasmine,karma-jasmine,Javascript,Angular,Typescript,Jasmine,Karma Jasmine,假设我们有一个名为Method1的方法,它接受和对象 obj={name:'jack',phone:'123} 正如您所看到的,这里有两个属性,name和phone Method1以obj.phone作为参数在内部调用Method2 我想检查是否调用了method2,以及是否向其传递了正确的参数。在这种情况下,它将始终是obj的电话属性 callFake()是解决方案吗?我该怎么做 不起作用的代码: it('should do something', () => { let ob
Method1
的方法,它接受和对象
obj={name:'jack',phone:'123}
正如您所看到的,这里有两个属性,name和phone
Method1以obj.phone
作为参数在内部调用Method2
我想检查是否调用了method2,以及是否向其传递了正确的参数。在这种情况下,它将始终是obj的电话属性
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);
});
我不确定你目前正在测试什么。是否正在检查是否使用作为
method1
参数传递的对象的phone
属性调用method2
在当前的测试中,您监视method2
,并提供一个模拟实现(callFake)。然后,您断言一个javascript对象obj
已被调用,并且该对象具有phone
属性。您需要调用函数本身subject.method1(obj)
,然后可以查看是否调用了spy
如果这就是你想要实现的,我想这就是你想要的:
it('should do something', () => {
let obj = { name: 'jack', phone: '123' };
spyOn(subject, 'method2');
subject.method1(obj);
expect(subject.method2).toHaveBeenCalledWith(obj.phone);
});
我勒个去?在复制粘贴代码时,我遗漏了subject.method1(ob)部分,但为什么我没有想到我可以使用havebeincalledwith()?谢谢
it('should do something', () => {
let obj = { name: 'jack', phone: '123' };
spyOn(subject, 'method2');
subject.method1(obj);
expect(subject.method2).toHaveBeenCalledWith(obj.phone);
});