Модульный тест вложенного обещания 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();
  });  
});

Другие вопросы по тегам