我在尝试在Angularjs中测试基于承诺的代码时遇到了困难。
我的控制器中有以下代码:
$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
。这一切都非常乏味,并且有很多样板代码。
还有其他测试方法吗?还是我的设计有异味?