我正在用angularjs jasmine和sinonjs测试一个承诺。 我对有关承诺的事情感到困惑。这是我的代码:
it('should return data with length 4 ', inject(function ($rootScope) {
var storageData;
mockDualStorage.getData.returns($.when(''));
// mockDualStorage.getData is called by getStorageData
// $rootScope.$digest() // not working here
dataGetter.getStorageData().then(function (data) {
console.log(1);
storageData = data;
});
$rootScope.$digest(); // only working here
console.log(2);
expect(storageData.length).toBe(4)// ok
}));
这里的一些事情很奇怪。
如果我将$rootScope.$digest()
置于dataGetter.getStorageData()
then
函数之上,则永远不会执行。
当$rootScope.$digest()
低于then
时,console.log
执行,then
的顺序为1,2
为什么$rootScope.$digest()
在{{1}}以上时才会执行{{1}}?据我所知,承诺已经解决了?
答案 0 :(得分:0)
在仔细阅读文档之后,找到了答案。
Kris Kowal的Q和$ q之间的差异: 有两个主要区别:$ q与$ rootScope.Scope Scope模型观察机制在角度中集成,这意味着更快地将分辨率或拒绝传播到模型中,避免不必要的浏览器重绘,这将导致UI闪烁。