gpt4 book ai didi

angular - Jasmine:如何在组件中测试异常消息?

转载 作者:行者123 更新时间:2023-12-02 00:32:41 26 4
gpt4 key购买 nike

对于我的单元测试,我确保我的组件正在调用正确的方法,然后在它们调用时适本地运行。我在这些测试中遇到的唯一麻烦是出现错误。我试图使我的服务失败,以便在警报窗口中显示一条异常消息。我正在寻找有关如何使我的服务失败而不导致实际测试失败的见解。假设我有一个类似于此的功能:

 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();

});

运行测试时,我的代码期望 spy 窗口已被调用。但是由于我的服务没有失败,我无法访问代码中的 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();
});

最佳答案

您需要做的是抛出异常,而不是调用 .and.returnValue

像这样

spyOn(myService, 'getData').and.throwError(“My Error”)

这将使 spy 在被调用时抛出异常,允许落入 catch 语句,然后您可以测试其中的代码是否被调用。

您可以查看Jasmine 文档here

关于angular - Jasmine:如何在组件中测试异常消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51199965/

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