当单元测试Angular JS Promise的notify函数时,从不调用notify

时间:2016-04-01 15:55:42

标签: javascript angularjs promise mocha notify

我有一个函数,当事情发生时使用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被调用'永远不会被记录。为什么通知功能不会触发?

1 个答案:

答案 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();
}));