我很难在 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
。这一切都很乏味,而且有很多样板代码。
有没有其他方法可以测试这些东西?还是我的设计有味道?