実際に起動する前にバックエンドから設定を読み込む必要があるAngularアプリがあります。私はアプリケーションのE2Eテストを書く必要があるので、バックエンドとは独立しています。私はこの目的のためにprotractor-http-mock
を使用しました。最初はangular-deferred-bootstrap
モジュールが設定依存関係を管理していましたが、私のportal
モジュールが完全にブートストラップされる前に動作するので、分度器はhttpMock
モジュールをこの段階に注入していません。私の次の決定は、別のモジュールportalBootstrap
にブートストラッププロセスを回すことだった:複数のAngularモジュールでprotractor-http-mockを使用
addMockModule
が呼び出され、httpMock
が分度器の内部モックモジュールに入った:私はそれを理解し、模擬モジュールの注入はこのように書き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']); });
レジストリ
browser.get
が呼び出されます- 角度が利用可能になるまで待って、ブートストラップを一時停止します
- 分度器は
httpMock
をselenium
- に、分母はすべて引数としてモジュール名を提供する
angular.resumeBootstrap
を呼び出します。したがって、モジュールインジェクタはそれらと共に作成されます。この時点httpMock
で
はportalBootstrap
からアクセス可能であると$http
要求が嘲笑ます。
問題は、第二のモジュール(portal
が)browser.get
がportalBootstrap
は、その構成を受け取り、portal
に移り、現時点で実行されていないとして、非常に明白である何httpMock
モジュールのコピーを受信していないということになりました。
protractor
は両方のモジュールにhttpMock
を注入できますか?あるいは、ブートストラップのアーキテクチャの変更の一部をお勧めしますか?
はテスト環境以外では存在しないため、angular.module('portal', ['httpMock'])
のようなハードコーディングは避けてください。