如何测试我的方法是否在angular2中抛出一个可观察错误
How to test if my method throws an observable error in angular2?
我正在为我的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"));
现在从我的理解,这个测试用例应该是成功的,但我得到以下错误后,我的测试用例失败:
期望函数抛出异常。
我尝试了多个期望块:
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');
});
}))
相关文章:
- Knockout observable没有观察到其中一个属性
- 在另一个可观察量完成后触发第二个表单提交单击
- $scope$观察数组中的一个特定对象——Angular JS控制器
- Angularjs - 观察模态窗口从另一个控制器关闭
- 使用rxjs创建一个可观察的对象,该对象稍后将连接到web套接字
- Knockout.js用单个json对象绑定一个可观察对象
- RxJS:我怎样才能用可观察量做一个“如果”
- Javascript 错误: $(..).观察不是一个函数
- 一个控制器如何在 Ember .js 中观察任意控制器/模型上的事件
- Ember.js:一个模型如何观察其他模型
- KNOCKOUTJS 将多个输入元素绑定到一个可观察量
- 从另一个可观察对象获取价值的最佳方法,而无需组合最新
- 更改一个对象的可观察属性会更改集合中所有对象的属性
- 创建一个依赖于可观察量“树”的 Knockout 绑定处理程序
- 挖空JS只使复杂对象数组的一个属性可观察
- 可观察到的敲除不是一个函数
- DOM突变观察者:如何支持DOM3突变事件的一个重要用途
- 如何拥有一个可观察的集合,该集合可以从两个源进行更新,而不会在knockout.js中引起循环
- 如何在下拉列表中设置一个可观察的值
- 在一个观察者- Magento的PHP页面中运行JavaScript