不知道如何测试angular.bootstrap包装器

时间:2016-02-19 08:46:35

标签: angularjs unit-testing testing karma-jasmine

我正在为我们的代码编写单元测试,我有一些使用angular.bootstrap的功能,我不知道如何使用karma测试它,因为那时不是任何模块或任何东西的一部分

(function () {
'use strict';

function fetchData() {

    var initInjector = angular.injector(['ng']);

    var $http = initInjector.get('$http');

    return $http.get('./app/config/app.config.json').then(function (response) {
        angular.module('myModule').value('globalConfig', response.data);
        return $http.get('./app/config/routes.config.json').then(function (response) {
            angular.module('myModule').value('routesConfig', response.data);
        }, function (errorResponse) {
            // Handle error case
            console.log('Error on loading routes:', errorResponse);
        });
    }, function (errorResponse) {
        // Handle error case
        console.log('Error on bootstrapping:', errorResponse);
    });
}

function bootstrapApplication() {
    angular.element(document).ready(function () {
        angular.bootstrap(document, ['myModule']);
    });
}

fetchData().then(bootstrapApplication);
}());

1 个答案:

答案 0 :(得分:0)

您可以重构此块以属于常规角度服务,以使其可测试。例如(并且我假设您的呼叫可以并行运行):

angular.module('myBootstrapModule', [])

  .factory('bootstrap', function($q, $http) {
    return function(moduleName) {
      return $q.all([
        $http.get('./app/config/app.config.json'),
        $http.get('./app/config/routes.config.json')
      ])
        .then(function(results) {
           angular.module(moduleName)
             .value('globalConfig', results[0].data)
             .value('routesConfig', results[1].data);
        })
        .catch(function(res) {
          // handle error
        });
      }
    }
  });

然后可以通过手动创建包含此模块的注入器来实现引导,同时通过加载myBootstrapModule来正常进行测试:

var injector = angular.injector(['ng', 'myBootstrapModule']);
var bootstrap = injector.get('bootstrap');

bootstrap('myModule').then(function() {
  // bootstrap angular
});