gpt4 book ai didi

javascript - Angular 1.5 && 异步/等待 && Jasmine 测试

转载 作者:行者123 更新时间:2023-11-29 14:39:12 24 4
gpt4 key购买 nike

我已经到处寻找,但还没有找到适合我的特殊情况的解决方案。

我们使用 Angular 1.5 和 Karma/Jasmine 设置进行单元测试。在最初的源代码中,我在 Controller 中使用了 ES2017 async/await。只要我在最后手动添加 $digest 的 $apply ,这似乎就可以正常工作。例如:

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 语句,以便在 jasmine 测试中解析。

  • 在我们的测试中,我试图模拟出会返回 promise 的服务。我发现返回 $q.when 不起作用。相反,我必须返回实际的 A+ 标准 Promises。我的猜测是 Angular 的 $q promise 并不完全符合标准,不能作为替代品。

  • 请注意,由于我们使用 PhantomJS 进行测试,因此我必须添加 polyfill 才能获得这些 Promise。

  • 在我的测试中,很多时候我不得不将一些 expect 语句包装在 setTimeout block 中。同样,我的假设是 promise 需要额外的“滴答声”来处理。

关于javascript - Angular 1.5 && 异步/等待 && Jasmine 测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41028434/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com