3

分度器がどのように機能するかについて読んだことがあります。いくつかの E2E テストを書きましたが、それでも$httpBackendサービスで使用することに不快感を覚えており、全体像の重要な部分が欠けている可能性があると思います。

HTTP 呼び出しをモック化するには、Angular のモジュール内で提供される$httpBackendサービスを使用する必要があります。ngMockE2Eそのモジュールをテストしているアプリケーションに含めるには、メイン モジュールをブートストラップするときに、依存関係として次のように構成する必要があります。

angular.module('myApp', ['ngMockE2E', 'bunch-of-other-dependencies']) 

これは事実上、E2E テスト用に本番環境の初期化とは別の初期化を行う必要があることを意味します。これは、別の が必要であることも意味しindex.htmlます。

ルートと「ほぼ」同じであるこれらの 2 つの追加ファイルを維持するのは面倒に思えます。さらに、個別のインデックスとモジュール定義は、テストが本番環境とはわずかに異なるアプリケーションでテストされることを意味します。これは、私にとってはその目的に反しているようです。

ここのパズルを正しく理解していますか、それとも何か抜けていますか? Angular でバックエンドレス E2E テストを実行するためのより良いソリューションはありますか? または、少なくとも、メンテナンスの煩わしさが本当に避けられない場合、その影響を最小限に抑えるためのいくつかの回避策があるのでしょうか?

4

1 に答える 1

2

私はあなたのために働くかもしれない回避策を見つけました。

html ページでアプリを定義し、基本モジュールと ngMockE2E を依存関係として追加します。私の dist ビルドでは、build:remove コメント間のすべてを削除する grunt-processhtml を追加しました。

grunt serve では、$httpBackend で実行されるように grunt-processhtml を含めませんでした。同じ方法で、dist ビルドで削除された httpBackend の期待値を追加します。

angular.module('myApp', [
    'myAppModule'
 <!-- build:remove -->
 <!-- including ngMock to test locally, but build remove wil make sure it's not in the dist -->
    , 'ngMockE2E'
    <!-- /build -->
    '
]) ;

セットアップには少し手間がかかりますが、セットアップが完了すると、柔軟性が大幅に向上します。

于 2014-08-05T15:07:39.410 に答える