我有以下异步功能:
async $onInit() {
try {
this.settings = await this.Service.getSettings(this.companyId);
} catch (error) {
this.uiFeedback.showSystemError('There was an error processing the request.', error);
}
}
如果异步函数捕获错误,我试图测试函数是否显示错误。目前唯一成功实现此目标的规范如下:
it('should show error if api call to get availability settings fails', () => {
Company.getSettings = () => {
throw new Error();
};
try {
cmp.$onInit().catch(() => {});
}
catch (error) {
expect(uiFeedback.showSystemError).toHaveBeenCalled();
}
});
所以基本上我需要在我的测试中添加两个额外的catch块来使这个测试工作。否则我会收到以下错误:
ERROR: 'Unhandled promise rejection', 'error'
有更好的方法吗?
答案 0 :(得分:2)
事实证明,问题在于karma如何处理异步函数的错误。 this.uiFeedback
函数中未定义$onInit
。然而,在我在Chrome中运行测试并在那里检查控制台之前,业力并未显示uiFeedback
未定义错误。在使用业力茉莉花测试async
函数时,每个人都需要注意的事项。