使用jasmine测试异步函数的错误处理

时间:2017-08-15 18:38:03

标签: javascript unit-testing asynchronous jasmine async-await

我有以下异步功能:

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'

有更好的方法吗?

1 个答案:

答案 0 :(得分:2)

事实证明,问题在于karma如何处理异步函数的错误。 this.uiFeedback函数中未定义$onInit。然而,在我在Chrome中运行测试并在那里检查控制台之前,业力并未显示uiFeedback未定义错误。在使用业力茉莉花测试async函数时,每个人都需要注意的事项。

相关问题