【发布时间】:2019-07-24 14:35:46
【问题描述】:
在 Angular 7 单元测试中,当将异步支持与 async..await 关键字结合使用时,有没有办法避免双重 async( async(){} ) 语法?
我是 Angular 的新手,但我是一位经验丰富的程序员,但我无法找到我喜欢的测试风格。
我想在测试中安全地使用async..await,并且我理解以下语法。然而,当指导新开发人员接触现代 javascript 和/或 async..await 的概念时,双重 async(async()) 语法对他们来说是多余且令人困惑的。他们忽略了外部异步。服务中抛出的异常会导致在实际测试之外报告故障,这很难追踪。
似乎以下之一会更好:
-
it()应该神奇地支持async..await并将我的回调包装在async()中,这样我就不必考虑它了。 -
it()应该采用一个可选的函数参数(即async或fakeAsync)来包装我的回调。 -
it()变体ita()和itfa()应该存在,它们将使用适当的异步帮助程序包装我的回调。 -
it()用async包装我的回调,另外一个itf()将用fakeAsync包装我的回调。
我是否遗漏了现有的概念或语法?有没有更好的选择?
import { async } from '@angular/core/testing';
describe('MyService', () => {
let service: MyService;
...
it('should get data', async( async() => {
// arrange
let expectedData = { answer: 42 };
// act
let data = await service.getDataAsync();
// assert
expect(data).toEqual(expectedData);
} ));
})
【问题讨论】:
-
至于“令人困惑”,现在他们已将
async()重命名为waitForAsync(),也许更容易理解?
标签: angular unit-testing karma-jasmine angular7 angular-test