然后没有调用已解决的承诺的方法

时间:2014-05-12 11:43:38

标签: angularjs promise sinon karma-jasmine

我正在尝试使用sinon,jasmine和$ 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?');});

有什么想法吗?

1 个答案:

答案 0 :(得分:8)

您需要调用摘要才能解决承诺。在Angular 2.0中,这将是固定的,(Angular 1.2在这里比Angular 1.1略好),但同时你必须调用

$rootScope.$digest()

为了使承诺得以解决。这是因为promises通过evalAsync工作。请参阅this question以了解有关摘要周期如何与$ q promises生命周期交互的更多信息。