4

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

任何想法?

4

1 回答 1

9

您需要调用摘要来解决承诺。在 Angular 2.0 中,这将得到修复,(并且 Angular 1.2 比 Angular 1.1 稍微好一点)但同时你必须调用

$rootScope.$digest()

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

于 2014-05-12T12:06:02.693 回答