Используя AngularJS, я пытаюсь выполнить unit test функцию, которая делает несколько вызовов $http.
Мой тест выглядит примерно так:
it('traverses over a hierarchical structure over multiple chained calls', function() {
myService.traverseTheStuff()
.then(function(theAggregateResult) {
// ...is never fulfilled
});
$httpBackend.flush();
});
Другие тесты с одним вызовом будут регистрировать обратный вызов, переданный в .then(), и выполнить его, как только я вызову .flush().
Тестирование кода выглядит примерно так.
function traverseTheStuff(){
// This will make a call to $http to fetch some data
return getRootData()
// It is fulfilled at the end of the test when I $httpBackend.flush()
.then(function(rootData){
// Another call to $http happens AFTER $httpBackend.flush()
return getNextLevel(rootData.someReference);
})
// The second promise is never fulfilled and the test fails
.then(function(nextLevel){
return aggregateTheStuff(...);
});
}
Для чего стоит, каждый из отдельных вызовов отдельно тестируется. Здесь я хочу пересечь дерево, объединить некоторые данные и unit test a), чтобы цепочка обещаний была подключена правильно, и б) агрегация является точной. Сжатие его в отдельные дискретные вызовы уже сделано.