在 Angular 测试中使用不同的参数多次监视相同的函数

Spy on same function multiple times with different parameters in Angular Test

有没有办法使用下面的代码

用不同的argument.Am调用调用函数两次

有如下两个参数

let dummybody1: any = {
    Product : "New Product",
   
  };
  let dummybody2: any = {
    Product : "New Node",
    
  };

编辑 1

component.ts

addDetailsClick(): void {
let body: any = {
      Product : this.actualselectedprod,
      
    }
    if(this.actualselectedprod == "New Product")
    {
      body.Product = this.newProductName; 
      body.HealthURL = this.healthEndPoint;
    }
    if(this.actualselectedipAddress == "New Node")
    {
      body.Ipaddress = this.newIPAddress;
    }
    let obs = this.cmnService.addEditNodeDetails(body);

    obs.subscribe(data => {
      console.log('success', data)

      this.addNodeMessage = "Successfully Added/Edited Node details";
    },
      error => {
        console.log('oops', error)

        this.addNodeMessage = "Failed to Add/Edit Node details";
      })

    
  }
}

component.spec.ts

    beforeEach(() => {
    
    spyOn(service,'addDetails').and.callFake(function(dummybody1) {
          
          return of('success')     
    
        });
    
    }

it('should be able to click add/new button', () => {
    result = component.addNewNodeButtonClick();
    service.addDetailsClick(dummybody1);
    //service.addEditNodeDetails(dummybody2);
    expect(component.addNodeMessage).toEqual("Successfully Added/Edited Node details");
    });

我正在尝试为参数为 dummybody1 的方法 addDetailsClick() 编写测试。

试图在 beforeEach 中为 dummybody2

添加另一个间谍方法
beforeEach(() => {
        
        spyOn(service,'addDetails').and.callFake(function(dummybody1) {
              
              return of('success')     
        
            });
        
       spyOn(service,'addDetails').and.callFake(function(dummybody) {
              
              return of('success')     
        
            });
        
}

出现错误

我如何使用带有参数 `dummybody2 的类似方法。

我相信你是从错误的方向思考这个问题的。我看到 2 个问题:

  1. 您似乎在尝试向间谍添加一个模拟负载,就好像说它只是在接收该参数时进行间谍活动。

如果您查看语法并返回基本 JavaScript 基础知识,您实际上根本没有传递有效负载。您正在定义 一个函数。您为参数命名没有任何区别。

spyOn(service,'addDetails').and.callFake(function(dummybody) {
  return of('success')     
});

这将对进入 addDetails 的任何内容调用该伪造 - 在这种情况下,dummybody 是一个变量声明,将成为您调用 service.addDetails(...) 的任何内容。

  1. 根据提供的代码,您的代码调用 addEditNodeDetails 但您在模拟 addDetails