gpt4 book ai didi

javascript - 如何测试我的方法是否在 angular2 中抛出可观察到的错误?

转载 作者:可可西里 更新时间:2023-11-01 01:40:45 24 4
gpt4 key购买 nike

我正在为我的 angular2 组件创建单元测试用例。

目前测试用例运行正常。

但我在异步调用方面遇到了问题。

例如。我有以下创建新用户的方法,如果用户已经存在,则会抛出错误:

onSubmit():Observable<any> {  
this._userService.saveUser(this.user).subscribe(
(response) => {
this._directoryService.getDirectoryById(this.selectedDirectory._id).subscribe(
(directory) => {
this.users = directory[0].users;
},
(error) => {
return error;
}
);
},
(error) => {
return error;
}
);
return ;
}

在我的服务中,我使用以下方法抛出错误:

if (alreadyExist) {
let error = "user already exist in database";
return Observable.throw(error);
}

现在我期待这个方法抛出一个错误:

expect( function(){ app.onSubmit(); } )
.toThrow(new Error("User already exist in database"));

现在根据我的理解,这个测试用例应该是成功的,但是在我的测试用例失败后我得到以下错误:

Expected function to throw an exception.

我尝试了多个 expect block :

expect(app.onSubmit()).toThrowError(new Error("User already exist in database"));

但仍然没有取得任何成功。

有什么输入吗?

谢谢

最佳答案

关于 Observable.throw 的事情是它实际上不会抛出任何错误。即使有,也会在内部处理。 expect().toThrowError 仅捕获未处理的异常并冒泡到测试中。

Observable.throw 所做的是将错误传递给 onError 回调。所以你应该做的是订阅调用,并检查回调中的错误

it('..', async(() => {
app.onSubmit().subscribe(
() => {
fail('expected error');
},
(error) => {
expect(error).toBe('user already exist in database');
});
}))

关于javascript - 如何测试我的方法是否在 angular2 中抛出可观察到的错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40217114/

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