【发布时间】:2017-04-23 01:03:41
【问题描述】:
我已经到处找了,但还没有找到适合我的特殊情况的解决方案。
我们使用 Angular 1.5 和 Karma/Jasmine 设置进行单元测试。在最初的源代码中,我在控制器中使用了 ES2017 async/await。只要我在最后手动添加 $apply 的 $digest 似乎就可以正常工作。 比如:
async function loadData() {
try {
vm.isLoading = true;
vm.data = await DataService.getData();
$scope.$apply();
}
catch (ex) {
vm.isLoading = false;
}
}
为了为这个特定的函数编写自动化测试,我尝试使用 Jasmine 的 spyOn 模拟 DataService.getData。所以,我做了这样的事情:
spyOn(DataService, 'getData').and.returnValue($q.when(fakeResult));
添加 spy 有效,但在运行测试时,代码似乎被击中并且无法使用 fakeResult 解析。我尝试在测试本身中添加 $digest/$apply 但无法修复它。我也做了很多研究,但仍然没有任何线索。
有人知道吗?
编辑:用$q promises 测试相同的方法效果很好,但我真的很想使用 async/await...
【问题讨论】:
-
仅供参考,
async/await是 ES2017 的一部分,将于明年发布,而不是 ES7(今年发布)。
标签: javascript angularjs jasmine async-await ecmascript-2017