单元测试带有$ http调用的嵌套promise的Angular服务

时间:2016-02-03 19:46:31

标签: javascript angularjs unit-testing jasmine angular-mock

我使用茉莉,试图将以下函数作为角度服务的一部分进行测试

service.initialize = function (params) {
    var defer = $q.defer();
    $q.all([service.getSpecs(params), service.getValData(params), service.getRelatedMeasures(params)])
        .then(function (values) {
            $q.all([service.getIssues(), service.getData(params, values)])
                .then(function (values) {
                    defer.resolve(values);
                });
        });
    return defer;
};

两个$q.all()语句中的每个引用函数都包含$http调用。

在我的测试中,我使用$http模拟了所有$httpBackend次调用。我的测试看起来像这样:

describe('the intialize function', function () {
    var mockParams = {};
    beforeEach(function () {
        svc.initialize(mockParams);
        $httpBackend.flush();
    });
    it('should call the getSpecs function', function () {
        expect(editorSvc.getSpecs).toHaveBeenCalledWith(mockParams);
    });
});

但是,我收到一个错误,即队列中仍有$http个请求。我曾尝试再次调用$httpBackend.flush(),并且还包括$rootScope.$apply()各种命令,我无法解决内部承诺。

有什么方法吗?

0 个答案:

没有答案
相关问题