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

And*_*erj 4 promise sinon angularjs 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?');});
Run Code Online (Sandbox Code Playgroud)

任何的想法?

Ben*_*aum 8

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

$rootScope.$digest()
Run Code Online (Sandbox Code Playgroud)

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