我正在尝试使用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?');});
有什么想法吗?
答案 0 :(得分:8)
您需要调用摘要才能解决承诺。在Angular 2.0中,这将是固定的,(Angular 1.2在这里比Angular 1.1略好),但同时你必须调用
$rootScope.$digest()
为了使承诺得以解决。这是因为promises通过evalAsync工作。请参阅this question以了解有关摘要周期如何与$ q promises生命周期交互的更多信息。