【发布时间】:2021-11-18 03:17:03
【问题描述】:
对于我的单元测试,我确保我的组件调用正确的方法,然后在调用时表现得恰当。我在这些测试中遇到的唯一问题是出现错误。我试图导致我的服务失败,以便在警报窗口中显示异常消息。我正在寻找有关如何使我的服务失败而不导致实际测试失败的见解。假设我有一个与此类似的功能:
exceptionMessage: string = 'error, please contact administrator'
getInfo() {
this.myService.getData('url')
.catch((error: Response | any) => {
this.displayAlert(this.exceptionMessage);
console.error(error.message || error);
return Observable.throw(error.message || error);
});
};
测试:
fit('should call displayAlert', () => {
let window = spyOn(userComponent, 'displayAlert');
spyOn(myService, 'getData').and.returnValue(Observable.of('url')//need to fail here
userComponent.ngOnInit();
userComponent.getInfo();
expect(window).toHaveBeenCalled();
});
在运行测试时,我的代码预计间谍窗口已被调用。但是由于我的服务没有失败,所以我无法访问代码中的 displayAlert 函数。现在,我能够成功测试我的服务是否正确处理错误,但它们会捕获一个可观察的并且不会像我的组件方法那样显示警报窗口。我试图像我的服务一样实施测试,但没有运气。我的目标是进行单元测试,这会导致我的服务失败。从那里我需要测试当我的组件遇到错误时,会显示一条错误消息。我需要服务失败,以便我可以访问代码this.displayAlert谢谢!如果有人可以指导我获得适当的文档或提供见解,那就太好了。我在这方面找不到太多信息。
编辑:更新测试:
fit('should have getUsers() call showAlertWindow', () => {
let window = spyOn(userComponent, 'showAlertWindow');
spyOn(userComponent, 'loadUser').and.throwError('Error');
expect(() => {
userComponent.loadUser()}).toThrowError('Error');
userComponent.loadUser();
expect(window).toHaveBeenCalled();
});
【问题讨论】:
标签: angular unit-testing jasmine karma-jasmine