1

私のバックグラウンドは Web 開発ではないため、用語が間違っている可能性があります。申し訳ありません。

要するに、$httpBackendデータを提供している場所を把握するのに苦労しています。$httpBackendこの質問は、一般的にどのように機能するかをよりよく理解することと同じくらい、修正を見つけることに関するものです。詳細はこちら。

AngularJS でシングルページ アプリを作成しています。シーダーとして、npm と bower を使用する Web サイトの AngularJS "Phone Catalog" サンプル プロジェクトを使用しています。

いくつかの RESTful Web サービスにアクセスするには、アプリが必要になります。現在使用しているngMockE2Eに出会いました。そのため、メインの app.js を index.html にロードするだけでなく、依存関係としてアプリと ngMockE2E を持つ devapp.js もロードしています var devapp = angular.module('devapp', ['app', 'ngMockE2E']);

内部でdevappは、次のように Web サービスをモックします。

devapp.run(function($httpBackend) {
    var items = [{{"id": 1, "price": 5}, {"id": 2, "price": 10}}];

    $httpBackend.whenGET('/json/items').respond(items);

    // let all other requests through to app
    $httpBackend.whenGET(/^\w+.*/).passThrough();
});

アプリを実行し、$http/json/items に呼び出しを送信するサービスを構築すると、すべて正常に動作します。

しかし、実際のブラウザーで出力を確認したいと思います。なぜかURLが見当たりません!

にアクセスすると index.html が起動しlocalhost:8000/app/、パーシャルのほとんどのアドレスは次のようlocalhost:8000/app/#/loginになります。しかし、JSON フォーム my fake を取得するにはどこに行かなければなりません$httpBackendか?

localhost:8000/json/items「使用できません」と表示されるlocalhost:8000/app/#/json/itemsか、パーシャルがロードされていない index.html に送信されるかを試しlocalhost:8000/app/json/itemsました。考えられるすべての組み合わせを試しました。

4

1 に答える 1

1

ポイントは$httpBackend、単体テスト用に HTTP バックエンドを偽造することです。ただし、実際にはバックエンドをテストしようとしているわけではありません。目標は、サービスを使用するメソッドをテストし、実際のサーバー データの代わりに偽のデータを返すことができるようにすることです$http

Angular.js ドキュメントから:

Angular アプリケーションがサーバーからのデータを必要とする場合、$http サービスを呼び出します。このサービスは、$httpBackend サービスを使用して実サーバーにリクエストを送信します。

基本的に、$httpBackend.whenGET()関数は$httpサービスへのフックであり、サーバーへの呼び出しが処理される前に評価されます。を使用して電話をかけるときはいつでも$http、指定したルート ルールに一致する場合、偽のデータが返されます。これにより、通常どおりコントローラーを作成し、テストしてから、テストされたコントローラーに影響を与えることなく、偽のデータ スタブを削除できます。

別の言い方をすれば、$httpBackendサービスはルートを処理したり、データを直接返したりせず、代わり$httpに他のモジュールに応答する方法を変更します。$http実際に偽のデータが返されていることを確認するには、そのデータ エンドポイントにリクエストを送信するルートに応答する実際のサービスを作成する必要があります。

于 2014-11-23T23:45:49.027 に答える