Карма жалуется, что "Модуль недоступен"

До тех пор, пока пару дней назад мои модульные тесты работали хорошо, и мой код работал в браузере безупречно. Затем я заметил это после того, как добавил модуль заглушки под названием "профиль":

INFO [karma]: Karma v0.12.24 server started at http://localhost:9876/
INFO [launcher]: Starting browser PhantomJS
INFO [PhantomJS 1.9.7 (Mac OS X)]: Connected on socket 7W-0vnkWZaWxYYtwFrhT with id 9336780
PhantomJS 1.9.7 (Mac OS X) ERROR
  Error: [$injector:nomod] Module 'profile' is not available! You either misspelled the module name or forgot to load it. If registering a module ensure that you specify the dependencies as the second argument.

Теперь я понимаю, что это самая распространенная ошибка AngularJS на земле, и я довольно хорошо отлаживаю это, но для жизни меня я не могу уйти. Подробности:

  • Код работает в браузере без ошибок.
  • Карма поднимает мои файлы таким образом:

        'node_modules/angular/angular.js',
        'node_modules/angular-mocks/angular-mocks.js',
        'node_modules/angular-ui-router/release/angular-ui-router.js',
        'node_modules/angular-bootstrap/ui-bootstrap.js',
        'node_modules/angular-ui-form-validation/dist/angular-ui-form-validation.js',
        'node_modules/angular-animate/angular-animate.js',
        'client/app/**/*.js'
    
  • Основной модуль имеет зависимость от уже объявленного профиля.

  • profile.js, profile.controller.js и profile.controller.spec.js - это заглушки, сгенерированные cg- angular -fullstack и не имеющие специального кода. Генератор по умолчанию прикрепляет все их в основном модуле, поэтому я изменил модуль для каждого в "профиль".

У меня полно идей. Если я не могу отладить это, мне придется предположить, что весь мой дизайн приложения ошибочен и перезапущен.: (

Ответ 1

Каким-то образом Карма не импортировала файлы в правильном порядке, хотя это было несколько недель назад. Мое разрешение состояло из трех частей:

  • Переименовано все определения модулей из *.js в *.module.js.
  • Переименована вся работа UI-маршрутизатора, которая не была в определении модуля из *.js в *.state.js.
  • Импортированные файлы в следующем порядке:

          'node_modules/jquery/dist/jquery.js',
          'node_modules/angular/angular.js',
          'node_modules/angular-mocks/angular-mocks.js',
          'node_modules/angular-ui-router/release/angular-ui-router.js',
          'node_modules/angular-bootstrap/ui-bootstrap.js',
          'node_modules/angular-ui-form-validation/dist/angular-ui-form-validation.js',
          'node_modules/angular-animate/angular-animate.js',
    
          // client files
          'client/app/app.module.js',
          'client/app/app.controller.js',
          'client/app/**/*.service.js',
          'client/app/**/*.directive.js',
          'client/app/**/*.module.js',
          'client/app/**/*.state.js',
          'client/app/**/*.controller.js',
          'client/app/**/*.spec.js'
    

Только после этого тесты снова начнут работать.