我有一个函数,当事情发生时使用notify来更新UI:
promiseFunction.poll().then(
function resolve() {},
function reject() {},
function notify() {
console.log('Notify was called');
}
);
尝试模拟通知的单元测试
it('will call notify', function () {
sinon.stub(promiseFunction, 'poll', function () {
var pollDeferred = $q.defer();
pollDeferred.notify();
return pollDeferred.promise;
});
systemUnderTest.run();
$rootScope.$digest();
});
日志'Notify被调用'永远不会被记录。为什么通知功能不会触发?
答案 0 :(得分:2)
好的,所以我最终解决了这个问题。在考虑它时它是有道理的。 Notify不会解析并因此履行承诺,因此在将promise更改回调用方之前无法发送。 $ timeout来到这里救援,所以最终得到的单元测试代码是:
it('will call notify', inject(function ($timeout) {
sinon.stub(promiseFunction, 'poll', function () {
var pollDeferred = $q.defer();
$timeout(function () {
pollDeferred.notify();
}, 0);
return pollDeferred.promise;
});
systemUnderTest.run();
$timeout.flush();
$rootScope.$digest();
}));