gpt4 book ai didi

angular - 测试 angular if else block 和 subscribe(response => {} block in jasmine

转载 作者:太空狗 更新时间:2023-10-29 18:35:16 24 4
gpt4 key购买 nike

我在编写组件方法测试用例时遇到问题。

如何在 subscribe((res) => {///block}ToasterService 中测试 Angular 组件方法 if else block 里面。

我在 component.ts 文件中调用了 Angular 服务方法。在服务调用 subscribe(response=>{} 中。

我已经验证了 if else block 中的响应值,并根据结果显示 toastr 消息,但我的 karma 报告说:response=> function not covered 和 inside if else block not 语句未被覆盖。

组件.ts

constructor(private userService: UserService,
private toastr: ToastrService) { }
sortUsers(sortKey: string) {
this.userService.getSortUserList(sortKey).subscribe((res) => {
if(res.Success){
this.userService.users = res.Data as User[];
}else{
this.toastr.error(res.Message);
}

});
}

组件.spec.ts

it('call sortUser when users are sorted', () => {
const users: User[] = [{
User_Id: 1,
First_Name: 'Madhu Ranjan',
Last_Name: 'Vannia Rajan',
Employee_Id: 12345,
Project_Id: 1,
Task_Id:1,
_id: 'xcv'
}];

component.sortUsers('First_Name');
const res = {Success: true, Data: users}
spyOn(service, 'getSortUserList').and.returnValue(of({Success: true, Data: users}));
});

希望下面的代码块也能被 jasmine 测试:

subscribe((res) => {
if(res.Success){
this.userService.users = res.Data as User[];
}else{
this.toastr.error(res.Message);
}

});

karma 报告:

Karma report

最佳答案

尝试

constructor(
public userService: UserService,
public toastr: ToastrService) {
}

在规范文件中:

it('call sortUser when users are sorted with success', () => {
const users: User[] = [{
User_Id: 1,
First_Name: 'Madhu Ranjan',
Last_Name: 'Vannia Rajan',
Employee_Id: 12345,
Project_Id: 1,
Task_Id:1,
_id: 'xcv'
}];
const res = {Success: true, Data: users}
spyOn(component.userService, 'getSortUserList').and.returnValue(of(res));
spyOn(component.toastr,'error').and.callThrough();
component.userService.users = undefined;
component.sortUsers('First_Name');
expect(component.userService.users).toBeDefined()
expect(component.toastr.error).not.toHaveBeenCalled()
});

it('call Error Toaster in sortUser() when users are sorted', () => {
const res = {Message: 'error_msg'}
spyOn(component.userService, 'getSortUserList').and.returnValue(of(res));
spyOn(component.toastr,'error').and.callThrough();
component.userService.users = undefined;
component.sortUsers('First_Name');
expect(component.userService.users).not.toBeDefined()
expect(component.toastr.error).toHaveBeenCalledWith('error_msg')
});

由于您是 karama 的新手,我强烈建议您使用 read this article其中包含一组文章,用于在底部页面处理 Angular 单元测试。

关于angular - 测试 angular if else block 和 subscribe(response => {} block in jasmine,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57503821/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com