тогда метод разрешенного обещания не вызывается

Я пытаюсь заглушить метод, используя синон, жасмин и $q. Я хочу, чтобы этот метод возвращал мои поддельные данные.

Проблема в том, что определенный оператор then никогда не вызывается, и я не могу понять, почему. Это уже упрощенная версия, но она все еще не работает:

  • Заглушка называется
  • Журнал консоли Steven Stub is called вызывается
  • Ни один из обратных вызовов then не вызывается
  • Нет сообщения об ошибке

Вот мой код

var p = {steven: function() {console.log('original steven');}},
    pStub = sinon.stub(p, 'steven', function(){
      console.log('Steven Stub is called');
      var defer = $q.defer();
      defer.resolve({item: 5});
      return defer.promise;
});

var promise = p.steven();

promise.then(
  function(data){console.log('Peter?');},
  function(data) {console.log('ERROR?');},
  function(data) {console.log('progress?');});

Есть идеи?


person Andresch Serj    schedule 12.05.2014    source источник


Ответы (1)


Вам нужно вызвать дайджест, чтобы разрешить промис. В Angular 2.0 это будет исправлено (и Angular 1.2 здесь немного лучше, чем Angular 1.1), но пока вам нужно вызывать

$rootScope.$digest()

Чтобы обещания разрешились. Это потому, что промисы работают через evalAsync. См. этот вопрос чтобы узнать больше о том, как цикл дайджеста взаимодействует с жизненным циклом промисов $q.

person Benjamin Gruenbaum    schedule 12.05.2014
comment
Работает! Учебники, которые я нашел, этого не делали :-/ Спасибо! +1 - person Andresch Serj; 12.05.2014
comment
@AndreschSerj рад, что смог помочь. Я надеюсь, что для 2.0 будет лучшее решение :) - person Benjamin Gruenbaum; 12.05.2014