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