在 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 个问题:
- 您似乎在尝试向间谍添加一个模拟负载,就好像说它只是在接收该参数时进行间谍活动。
如果您查看语法并返回基本 JavaScript 基础知识,您实际上根本没有传递有效负载。您正在定义 一个函数。您为参数命名没有任何区别。
spyOn(service,'addDetails').and.callFake(function(dummybody) {
return of('success')
});
这将对进入 addDetails 的任何内容调用该伪造 - 在这种情况下,dummybody 是一个变量声明,将成为您调用 service.addDetails(...)
的任何内容。
- 根据提供的代码,您的代码调用
addEditNodeDetails
但您在模拟 addDetails
。
有没有办法使用下面的代码
用不同的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 个问题:
- 您似乎在尝试向间谍添加一个模拟负载,就好像说它只是在接收该参数时进行间谍活动。
如果您查看语法并返回基本 JavaScript 基础知识,您实际上根本没有传递有效负载。您正在定义 一个函数。您为参数命名没有任何区别。
spyOn(service,'addDetails').and.callFake(function(dummybody) {
return of('success')
});
这将对进入 addDetails 的任何内容调用该伪造 - 在这种情况下,dummybody 是一个变量声明,将成为您调用 service.addDetails(...)
的任何内容。
- 根据提供的代码,您的代码调用
addEditNodeDetails
但您在模拟addDetails
。