Kid*_*001 2 unit-testing jasmine karma-jasmine angular
对于我的单元测试,我确保我的组件调用正确的方法,然后在调用时表现得适当。我在这些测试中遇到的唯一麻烦是错误。我试图使我的服务失败,以便在警报窗口中显示异常消息。我正在寻找有关如何使我的服务失败而不导致实际测试失败的见解。可以说我有一个与此类似的函数:
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);
});
};
Run Code Online (Sandbox Code Playgroud)
测试:
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();
});
Run Code Online (Sandbox Code Playgroud)
运行测试时,我的代码期望调用间谍窗口。但由于我的服务没有失败,我无法访问代码中的 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();
});
Run Code Online (Sandbox Code Playgroud)
你需要做什么,而不是打电话.and.returnValue,而是抛出异常。
像这样的东西
\n\nspyOn(myService, \'getData\').and.throwError(\xe2\x80\x9cMy Error\xe2\x80\x9d)\nRun Code Online (Sandbox Code Playgroud)\n\n这将使spy每当调用时抛出异常,从而允许落入 catch 语句中,然后您可以在其中测试内部代码是否正在被调用。
您可以在此处Jasmine查看文档
| 归档时间: |
|
| 查看次数: |
16698 次 |
| 最近记录: |