Я пытаюсь запустить модульные тесты для моего кода AngularJS.Но когда я использую имя приложения из моего app.js, оно выдает ошибку.Он работает нормально при инициализации модуля в конкретном контроллере.
Для этого примера у меня есть тестовый файл и файл src в одной папке.
Karma.conf.js
module.exports = function(config) {
config.set({
basePath: '../',
frameworks: ['jasmine'],
files: [
'assets/libs/angular/angular.min.js',
'assets/libs/angular/angular-mocks.js',
'app/**/*.js',
'app/**/*.html',
'tests/sum.js',
'tests/sum.spec.js'
],
exclude: [
],
preprocessors: {
},
reporters: ['progress'],
port: 9876,
colors: true,
logLevel: config.LOG_INFO,
autoWatch: true,
browsers: ['PhantomJS'],
singleRun: false,
plugins: [
'karma-phantomjs-launcher',
'karma-jasmine',
'karma-ng-html2js-preprocessor',
'karma-coverage',
'karma-junit-reporter',
'karma-threshold-reporter',
'karma-htmlfile-reporter'
],
concurrency: Infinity
})
}
gruntfile.js
module.exports = function(grunt) {
grunt.initConfig({
karma: {
unit: {
configFile: 'config/karma.conf.js',
autoWatch: true
}
}
});
grunt.loadNpmTasks('grunt-karma');
};
sum.spec.js
describe('trinetApp level 1', function () {
beforeEach(angular.mock.module('cookbook'));
var $controller;
beforeEach(angular.mock.inject(function(_$controller_){
$controller = _$controller_;
}));
describe('trinetApp level 2', function () {
it('should assign the correct rapper to scope', function () {
var $scope = {};
var controller = $controller('MainCtrl', {
$scope: $scope
});
$scope.x = 1;
$scope.y = 2;
$scope.sum();
expect($scope.result).toBe(1+2);
});
});
});
sum.js
angular.module('cookbook', [])
.controller('MainCtrl', function($scope) {
$scope.sum = function () {
$scope.result = $scope.x + $scope.y;
}
});
Но модульный тест не проходит, когдаМой контроллер подключен к имени приложения, как показано ниже.
app.js
var appName = angular.module('myApp',
['ui.bootstrap','ui.bootstrap4','TrinetPassport.templates','ngRoute',
'ngResource', 'ngSanitize', 'ngDialog', 'tc.chartjs', 'ngDraggable',
'ngMask',
'ngStorage', 'ui.sortable', 'ui.select', 'ngCookies', 'angular.filter',
'ngTagsInput', 'vAccordion', 'ngMaterial', 'angulartics',
'angulartics.google.analytics','d3','infinite-scroll',
'ui.router','ngMap','ngIdle']);
sum.js (не работает)
appName.controller('MainCtrl', function($scope) {
$scope.sum = function () {
$scope.result = $scope.x + $scope.y;
}
});
Есть ли способинициализировать контроллер с именем приложения, а не с помощью angular.module в каждом из моих контроллеров ??