测试角度服务,异步返回Jasmine 2.0中的$ q Promise

时间:2015-03-01 00:24:01

标签: javascript angularjs jasmine karma-runner karma-jasmine

我有一个测试承诺结果的规范。

承诺会解决,但thencatchfinally处理程序似乎永远不会触发,并调用done();

因此,规范超时并失败(请参阅Chrome Developer Console的屏幕截图)。

Jasmine套件和规范

describe("promise suite", function () {
        var someMethod = function() {
            var deferred = $q.defer();
            setTimeout(function() {
                console.log('All done calling resolve');
                deferred.resolve('all done');
            }, 500);
            return deferred.promise;
        }
        iit("promise spec", function (done) {
            someMethod()
                .then(function(message) {
                    console.log('promise method resolved, running expectation');
                    expect(message).toBe('all done');
                    done();
                })
                .catch(function(error) {
                    console.log('promise was rejected ', error);
                    done();
                })
                .finally(function() {
                    console.log('calling done from finally');
                    done();
                });
        });
    });

enter image description here

2 个答案:

答案 0 :(得分:0)

$ q promises在下一个摘要中得到解决...所以你需要触发一个摘要:

$rootScope.$digest();

答案 1 :(得分:0)

尝试使用plunkr中的代码并且它正常工作,请参阅控制台输出。

由于示例中没有应用程序引导程序我使用https://docs.angularjs.org/api/ng/function/angular.injector ng模块来获取$q服务

http://plnkr.co/edit/pIZ8LVtlyERXVxQB9HI2?p=preview