Угловое модульное тестирование с кармой и джеми - PullRequest
0 голосов
/ 07 февраля 2019

Я настроил свое приложение Angularjs для модульного тестирования с Karma и Jasmin.но когда я пытаюсь запустить свои тесты с karma start, я получаю сообщение об ошибке. Контроллер с именем Myctrl не зарегистрирован.

Моя структура приложения выглядит следующим образом

project-folder
  - app
    - components
      - controllers
        - account
          - signInController.js
          - SignUpController.js
  - app.modules.js
  - app.routes.js
  - test

Это мой app.modules.js

let app = angular.module( 'app', [
  'app.config', 'templates', 'ngAnimate', 'ngAria', 'ngCookies', 'ngMessages', 'ngResource', 'ngSanitize',
  'ngTouch', 'ui.router', 'ui.bootstrap', 'ui.utils', 'ui.load', 'ui.jq', 'oc.lazyLoad','angular-cache',
  'ngToast', 'ngFileUpload', 'ngFileSaver', 'angularMoment', 'angulartics', 'angulartics.google.analytics',
  'ngMessages', 'ng.httpLoader'
]);

И файл karma.config.js

module.exports = function(config) {
  config.set({

    // base path that will be used to resolve all patterns (eg. files, exclude)
    basePath: '',


    // frameworks to use
    // available frameworks: https://npmjs.org/browse/keyword/karma-adapter
    frameworks: ['jasmine', 'browserify'],

    // list of files / patterns to load in the browser
    files: [
      'dist/libs/jquery/jquery.js',
      'dist/libs/angular/angular.js',
      'dist/libs/angular-ui-router/angular-ui-router.js',
      'dist/libs/angular-sanitize/angular-sanitize.js',
      'dist/libs/angular-mocks/angular-mocks.js',
      'dist/libs/angular-bootstrap/ui-bootstrap-tpls.js',
      'app/app.modules.js',
      'app/app.routes.js',
      'app/config.lazyload.js',
      'app/components/controllers/account/*.js',
      'test/**/*spec.js',
      ],
      . 
      .
describe('Myctrl Test', function() {

  describe('Myctrl', function() {
    var vm;

    beforeEach(inject(function( ) {
      angular.module('app')
    }));

    beforeEach(inject(function(_$rootScope_, $controller) {
      var scope = _$rootScope_.$new();
      vm = $controller('Myctrl', {$scope: scope});
    }));

    it('test controller', function() {
      expect(vm.title).toBe(null);
    });

  });

});
app.controller( 'Myctrl', ['$scope', '$state', 'backendApi', 'ngToast', 'access_token', 'FileUploader', 'keys',
function( $scope, $state, backendApi, ngToast, access_token, FileUploader, keys ) {

  $scope.title = "Hello";


}])

1 Ответ

0 голосов
/ 11 февраля 2019

Перед каждым тестом вы должны зарегистрировать модуль.

Проблема в том, что вы пробовали собственный AngularJS angular.module('app'), в то время как вы должны использовать module('app'), который является псевдонимом для angular.mock.module

Эта функция регистрирует код конфигурации модуля.Он собирает информацию о конфигурации, которая будет использоваться при создании инжектора с помощью инжектирования.

Измените код на

beforeEach(function( ) {
  module('app')
});

и убедитесь, что Myctrl принадлежит app module.

Рассмотрим следующий article Testing a Controller section.

FYI: angular.module('app') требуется только для ссылки на модуль внутри углового приложения, но эта функцияфактически не включая модуль.

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