16

Angular.js$httpBackendを使用して、呼び出しをラップするいくつかのサービスをテストしてい$httpます (これは ngMockE2E ではなくngMock にあります)。

expectやのようなものwhenは、URL クエリ パラメータの順序に敏感なようです。たとえば、$httpBackend.when('POST','/apiCall?X=1&Y=2').respond(/* ... */)またはの場合、URL にX=1&Y=2ではなくY=2&X=1$httpBackend.expectPOST('/apiCall?X=1&Y=2')があると、 URL の不一致が発生します。

テスト対象のサービスが、テストを中断することなく URL クエリ文字列パラメーターの順序を自由に変更できるように、テストを作成したいと考えています。$httpBackend のドキュメントでこれを解決する方法を見つけることができませんでした。これを行う正しい方法は何ですか?

4

2 に答える 2

9

angular はparams、$http と組み合わせて使用​​されるオブジェクトのキーをソートします。

$http({
    url:"/myurl",
    method:"GET",
    params:{
       Y:1
       X:2
    }}); 

Angular は次のことを効果的に行います:Object.keys(myParams).sort() そしてその順序でキーを追加します。最終的には'/myurl?X=2&Y=1'

URLで直接ではなく、params:angularが処理するパラメーターでクエリパラメーターを一貫して使用することをお勧めします。

別の解決策は、テストで正規表現を使用することです。

$httpBackend.expectPOST(/\/myurl\?((X|Y)=\d{1,}&?){2}/) 正規表現

色が混ざらないため、ドキュメントが再設計されて以来、RegExp を使用できるという事実を見つけるのは非常に困難です。

于 2014-03-12T21:51:19.000 に答える
7

$httpParamSerializer サービスを使用してこれを実現できます。

$httpParamSerializer({ param: 1, param2: 2 });

これにより、angulars $http サービスとパラメーターが一致する、一致する文字列化されたクエリ文字列が返されます。

于 2015-07-24T13:23:03.037 に答える