作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
假设我们有一个名为 Method1
的方法,它接受和对象 obj={ 姓名:'jack',电话:'123' }
如您所见,这里有两个属性:姓名和电话。
方法 1 在内部调用方法 2,并以 obj.phone 为参数。
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);
});
最佳答案
我不确定您当前正在测试什么。您是否检查是否使用作为参数传递给 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);
});
关于javascript - Angular 单元测试: How to check if the spied upon method is getting the correct argument?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56908129/
我是一名优秀的程序员,十分优秀!