Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 角度单元测试:如何检查spied-On方法是否得到正确的参数?_Javascript_Angular_Typescript_Jasmine_Karma Jasmine - Fatal编程技术网

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