我正在为我们的代码编写单元测试,我有一些使用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);
}());
答案 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
});