Angular - 带有可观察 .catch 块的测试方法
Angular - test method with observable .catch block
我是 RxJS 世界的新手,我对我的一种方法进行单元测试时遇到问题。
在我的 Angular 组件中,我有一个 login
方法 - 在里面我只是从服务调用方法。服务中的方法 returns 对组件可见。在这里你可以看到一段代码:
public login(username: string, password: string): void{
this.authService.login(username, password) //this return Observable in real world
.catch(() => {
this.formErrors['general.error'] = true;
return Observable.throw('error! :<');
})
.subscribe(() => {
this.router.navigate(['/someRoute']);
});
}
如您所见,这是非常简单的方法(在实际应用中会稍微复杂一些,但现在并不重要),现在我正在尝试编写单元测试(在 Jasmine 中):
it('', () => {
authService.login.and.returnValue(Observable.throw('')); //authService is my mock
component.login('u', 'p');
expect(component.formErrors['general.error']).toBeTruthy();
});
但是我得到了错误,因为我从 catch
部分抛出了错误:
login.component login FAILED (error! :< thrown)
我做错了什么?
P.S。
我尝试添加 expect(component.login).toThrow();
但没有成功...
不要直接调用 component.login('u', 'p')
,而是尝试让测试运行程序执行它。
it('', () => {
authService.login.and.returnValue(Observable.throw('')); //authService is my mock
expect(component.login.bind(component, 'u', 'p')).toThrow(...);
expect(component.formErrors['general.error']).toBeTruthy();
});
我是 RxJS 世界的新手,我对我的一种方法进行单元测试时遇到问题。
在我的 Angular 组件中,我有一个 login
方法 - 在里面我只是从服务调用方法。服务中的方法 returns 对组件可见。在这里你可以看到一段代码:
public login(username: string, password: string): void{
this.authService.login(username, password) //this return Observable in real world
.catch(() => {
this.formErrors['general.error'] = true;
return Observable.throw('error! :<');
})
.subscribe(() => {
this.router.navigate(['/someRoute']);
});
}
如您所见,这是非常简单的方法(在实际应用中会稍微复杂一些,但现在并不重要),现在我正在尝试编写单元测试(在 Jasmine 中):
it('', () => {
authService.login.and.returnValue(Observable.throw('')); //authService is my mock
component.login('u', 'p');
expect(component.formErrors['general.error']).toBeTruthy();
});
但是我得到了错误,因为我从 catch
部分抛出了错误:
login.component login FAILED (error! :< thrown)
我做错了什么?
P.S。
我尝试添加 expect(component.login).toThrow();
但没有成功...
不要直接调用 component.login('u', 'p')
,而是尝试让测试运行程序执行它。
it('', () => {
authService.login.and.returnValue(Observable.throw('')); //authService is my mock
expect(component.login.bind(component, 'u', 'p')).toThrow(...);
expect(component.formErrors['general.error']).toBeTruthy();
});