【发布时间】:2018-03-29 13:46:39
【问题描述】:
我很难在 Angularjs 中测试基于 Promise 的代码。
我的控制器中有以下代码:
$scope.markAsDone = function(taskId) {
tasksService.removeAndGetNext(taskId).then(function(nextTask) {
goTo(nextTask);
})
};
function goTo(nextTask) {
$location.path(...);
}
我想对以下案例进行单元测试:
- 当
markAsDone被调用时,它应该调用tasksService.removeAndGetNext - 当
tasksService.removeAndGetNext完成后,它应该改变位置(调用goTo)
在我看来,单独测试这两种情况并不容易。
我测试第一个是:
var noopPromise= {then: function() {}}
spyOn(tasksService, 'removeAndGetNext').andReturn(noopPromise);
现在要测试第二种情况,我需要创建另一个始终为resolved 的虚假承诺。这一切都很乏味,而且有很多样板代码。
还有其他方法可以测试这些东西吗?还是我的设计有异味?
【问题讨论】:
-
接受的解决方案对我不起作用。这样做了:stackoverflow.com/questions/21895684/…
标签: javascript angularjs promise