undefined не является конструктором AngularJS Jasmin / Karma Error - PullRequest
0 голосов
/ 03 декабря 2018

Я пытаюсь запустить модульные тесты для моего кода 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 в каждом из моих контроллеров ??

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...