Angular App прекрасно работает, но ngMock НЕ загружает модули правильно

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

Я могу успешно добраться до всех моих контроллеров / сервисов. и они были связаны друг с другом через подмодули.

Я использовал субмодули, чтобы лучше организовать состояния / маршруты для ui-router. (Ранее у нас были ВСЕ наши состояния в файле app dot js. Их было около 50. Теперь они организованы в более мелкие модули).

app.js [файл модуля]

var phpApp = angular.module("phpApp",
[
    "ui-router"
    "phpApp.components" , ...

]).config(...).run(...);

components.js [файл модуля, содержит состояния / маршруты]

var ComponentModule = angular.module("phpApp.components",
[
    "ui-router"
    "phpApp.components.user" , 
    "phpApp.components.client"
     ...

]).config(...).run(...);

user.js [файл модуля, содержит состояния / маршруты]

var UserModule = angular.module("phpApp.components.user",
[
    "ui-router"

]).config(...).run(...);

user-controller.js // LOADS fine; это контроллер.

angular.module('phpApp.components').controller('UserController', ....);

client-controller.js // НЕ загружается! Не удается найти модуль phpApp.components...

angular.module('phpApp.components').controller('ClientController', ...);

Мой файл index.html загружает скрипты в следующем порядке:

<script src="app.js"></script>
<script src="components/components-module.js"></script>
<script src="components/user/user-module.js"></script>
<script src="components/client/client-module.js"></script>
...
<script src="components/user/user-controller.js"></script>
<script src="components/client/**client-controller.js**"></script>

Я не понимаю Мой клиент-контроллер загружается ПОСЛЕ моего пользовательского контроллера... но он не может найти нужный модуль?

Я получаю ошибку:

Uncaught Error: [$injector:nomod] Module 'phpApp.components' 
is not available! You either misspelled the module name or 
forgot to load it.

Я очень смущен и расстроен в этот момент. Я не уверен, где я иду не так.

1 ответ

Ответ лежит в конфигурационном файле karma (по умолчанию karma.conf.js)

Ответ, как и ожидалось, был простым.

У меня было правило, чтобы включить все файлы JavaScript:

"app/app.js",
"app/components/**/*.js",

Вам необходимо убедиться, что вы переписали свои правила загрузки, чтобы сначала загрузить все файлы JS модуля:

"app/app.js",
"app/components/**/*-module.js", <-- modules must load first
"app/components/**/*.js",

Чтобы объяснить, у меня есть мой проект, где:

1) controllers are in their respective xxx-controller.js files, 
2) ervices are in xxx-service.js files and 
3) modules are in xxx-module.js files
Другие вопросы по тегам