У меня есть приложение с угловыми углами, которое должно загружать конфигурацию из бэкэнда до его фактического запуска. Мне нужно написать тесты E2E для приложения, так что он не зависит от бэкэнд. Для этой цели я использовал protractor-http-mock
. Первоначально был модуль angular-deferred-bootstrap
, управляющий конфигурационной зависимостью, но он работает до того, как мой модуль portal
полностью загружен, поэтому транспортир не впрыскивает модуль httpMock
на этом этапе. Мое следующее решение было превратить самозагрузки процесс в отдельный модуль portalBootstrap
:Использование protractor-http-mock в нескольких Угловых модулях
angular
.module('portalBootstrap', [])
.run(['$http', '$q', '$log', '$location', ($http, $q, $log, $location) => {
bootstrap($http, $q, $log, $location).then(config => {
angular.module('portal').constant('conf', config);
var injector = angular.bootstrap(document, ['portal']);
});
}]);
angular.element(document).ready(() => {
var bootstrapElement = document.getElementById('bootstrap');
var injector = angular.bootstrap(bootstrapElement, ['portalBootstrap']);
});
Как я понимаю, фиктивные модули впрыска выглядит следующим образом:
addMockModule
называется иhttpMock
попадает во внутренний макете модуль транспортир в реестрbrowser.get
- транспортир ждет, пока угловой не будет доступен и остановит его ботстрап
- транспортир впрыскивает
httpMock
вselenium
- транспортир называет
angular.resumeBootstrap
предоставление всех фиктивных модулей имена в качестве аргумента, поэтому модуль форсунки создается с ними.
На данный момент httpMock
доступен из portalBootstrap
и $http
просьбы получить издевались.
Проблема теперь, что второй модуль (portal
) не получает копию httpMock
модуля, что вполне очевидно, как browser.get
не выполняется в тот момент, когда portalBootstrap
получает свою конфигурацию и переходит к portal
.
Возможно ли, что protractor
может вводить httpMock
в оба модуля? Или, может быть, некоторые изменения в архитектуре начальной загрузки рекомендуется?
Следует избегать любого жесткого кодирования, такого как angular.module('portal', ['httpMock'])
, поскольку httpMock
нет в не тестируемой среде.