Модульный тест вложенного обещания angularjs/jasmine
Я пытаюсь следовать фрагменту кода, чтобы упростить его, я удалил большую часть нежелательного кода.
function functionToTest() {
if(hasUnsavedChanges()){
return customService.confirm().then(function(confirmed) {
console.log(confirmed);
if(confirmed) {
return customService.openSomething().then(function (data){
console.log(data);
return customService.doneSomething();
});
} else {
return customService.doSomething().then(function (){
return customService.doSomethingBeforeDone().then(function (){
return customService.doneSomething();
});
});
}
}, function() {
return customService.doneSomething();
});
} else {
return customService.doneSomething();
}
}
Вот мой модульный тест, когда hasUnsavedChanges() возвращает true
it('should doSomething', function() {
spyOn(customService, 'confirm').and.returnValue(Promise.resolve(true));
spyOn(customService, 'openSomething').and.returnValue(Promise.resolve({data: 'something'}));
spyOn(customService, 'doneSomething').and.returnValue(Promise.resolve());
functionToTest();
$scope.$apply();
expect(customService.confirm).toHaveBeenCalled();
expect(customService.openSomething).toHaveBeenCalled();
expect(customService.doneSomething).toHaveBeenCalled();
});
customService.confirm вызывается, но остальные 2 утверждения не вызываются.
Хотя я вижу, что console.log(подтверждено) и console.log(данные) показывают правильные значения, которые возвращаются шпионам
1 ответ
Утверждение в блоке вызова моей функции исправило это
it('should doSomething', function() {
spyOn(customService, 'confirm').and.returnValue(Promise.resolve(true));
spyOn(customService, 'openSomething').and.returnValue(Promise.resolve({data: 'something'}));
spyOn(customService, 'doneSomething').and.returnValue(Promise.resolve());
functionToTest().then(function() {
expect(customService.confirm).toHaveBeenCalled();
expect(customService.openSomething).toHaveBeenCalled();
expect(customService.doneSomething).toHaveBeenCalled();
});
});