【问题标题】:How do I mock a factory that returns a promise in angularJs 1.x如何模拟在 angularJs 1.x 中返回承诺的工厂
【发布时间】:2017-11-12 21:15:58
【问题描述】:

我有一个从 $http 返回承诺的工厂

angular.module('app.core')
    .factory('dataService', dataService);
dataService.$inject = ['$http'];
function dataService($http){
    return $http.get('/getLocalSession')
        .then(function(response){
            return response.data;
        });
}

这是使用上述工厂的另一项服务

angular.module('app.core')
    .service('analytics', analytics);
analytics.$inject = ['dataService'];
function analytics(dataService){
    dataService.then(function(data){
        //do something with data
    });
}

这是分析服务的测试

describe('analytics service', function(){
    var analytics, $q, dataService, $rootScope;
    var testLanId = 'user001';
    beforeEach(module('app.core'));
    beforeEach(module({
        dataService: $q.when({
            lanId: testLanId
        })
    }));
    beforeEach(inject(function(_analytics_, _$q_, _$rootScope_){
        analytics = _analytics_;
        $q = _$q_;
        $rootScope = _$rootScope_;
    }));

    it('expect it to do something', function(){
        $rootScope.$apply();
        //expect specs
    });
});

但是这不起作用,因为在调用注入之前没有定义 $q。 我见过这个post,但是他们有一个服务返回一个返回承诺的函数。

我们如何模拟一个返回承诺的工厂?

【问题讨论】:

    标签: angularjs unit-testing


    【解决方案1】:

    使用 angular.mock.module 的函数参数并提供 $q 作为依赖项。

    beforeEach(module(function($provide){
        $provide.factory('dataService', function($q){
            return $q.when({lanId: testLanId});
        });
    }));
    

    【讨论】:

      猜你喜欢
      • 2014-09-27
      • 1970-01-01
      • 1970-01-01
      • 2017-01-30
      • 1970-01-01
      • 2014-09-14
      • 2015-09-21
      • 1970-01-01
      • 2014-07-05
      相关资源
      最近更新 更多