我已经到处找了,但还没有为我的特殊情况找到解决方案。
我们使用 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 模拟 DataService.getData spyOn
。所以,我做了这样的事情:
spyOn(DataService, 'getData').and.returnValue($q.when(fakeResult));
添加 spy 有效,但是在运行测试时,代码似乎被击中并且无法使用fakeResult
. 我尝试在测试本身中添加 $digest/$apply 但无法修复它。我也做了很多研究,但仍然没有任何线索。
有人有线索吗?
编辑:用$q
Promise 测试相同的方法效果很好,但我真的很想使用 async/await ...