_$httpBackend.whenGET('/restpath/api/v1/books')
.respond({// some data});
_
次のエラーが発生します
_Error: Unexpected request: GET /restpath/api/v1/books
Expected GET /restpath/api/v1/books?limit=10&start=1
_
ExpectGETの場合、次のものがあり、これにより動的クエリ文字列が作成されます。主に「start」パラメーターとwhenGET部分で、「start」に応じて動的コンテンツをサーバー化しようとしています
$httpBackend.expectGET('/restpath/api/v1/books?limit=10&start=1'); // the actual service goes here , which does the $http service. we don't care $httpBackend.flush();
(angular v1.5.0-build.4371より前のバージョンのアプリの場合)
'?'の後のパラメータを気にしない場合あなたはこれを行うことができます :
$httpBackend.expectGET(/.*?restpath\/api\/v1\/books?.*/g).respond(200, '{}');
あなたが最初のパラメータを気にするならこれをしてください:
$httpBackend.expectGET(/.*?restpath\/api\/v1\/books?limit=10.*/g).respond(200, '{}');
あなたがそれらを気にするなら、すべてこれをしてください:
$httpBackend.expectGET("/restpath/api/v1/books?limit=10&start=1").respond(200, '{}');
[〜#〜]編集[〜#〜]
v1.5.0-build.4371 の時点で、ドキュメントには、応答コールバックがparams
引数を受け入れると記載されています。
デフォルトでは、リクエストURLのクエリパラメータはparamsオブジェクトに解析されます。したがって、/ list?q = searchstr&orderby = -nameのリクエストURLは、paramsを{q: 'searchstr'、orderby: '-name'}に設定します。
したがって、_'/restpath/api/v1/books?limit=10&start=1'
_の場合、次のようになります。
_$httpBackend
.whenGET('/restpath/api/v1/books?limit=10&start=1')
.respond(function(method, url, data, headers, params) {
// params will be {
// limit: 10,
// start: 1
// }
});
_
[〜#〜]前へ[〜#〜]
あなたが使う
.expectGET()
$ httpBackendを使用して、不一致時に例外をスローする場合。.whenGET()
。docs は、.respond()
が署名付きのArray
またはコールバック関数のいずれかを受け入れることができると述べています:function(method, url, data, headers) {};
リクエストURLにアクセスする方法がわかったので、動的コンテンツを提供するために、 Andy Eによって投稿されたようなヘルパー関数を使用して、.respond()
コールバックで受け取ったURLを簡単に解析できます。 この中 質問 :
_// inspired by Andy E
// @https://stackoverflow.com/users/94197/andy-e
function matchParams(query) {
var match;
var params = {};
// replace addition symbol with a space
var pl = /\+/g;
// delimit params
var search = /([^&=]+)=?([^&]*)/g;
var decode = function (s) { return decodeURIComponent(s.replace(pl, " ")); };
while (match = search.exec(query))
params[decode(match[1])] = decode(match[2]);
return params;
}
_
このヘルパーをスコープに含めると、次のような動的な応答を構築することができます。
_// we use a regex to be able to still respond to
// dynamic parameters in your request
var urlRegex = /\/restpath\/api\/v1\/books\?limit=(\d+)&start=(\d+)/;
$httpBackend
.whenGET(urlRegex)
.respond(function(method, url){
// send only the url parameters to the helper
var params = matchParams(url.split('?')[1]);
// params is now an object containing
// {limit: 10, start:1}
// so do whatever you want with it.
var dynamicData = getMockData(params.start);
// don't forget to return.
return [200, dynamicData];
});
mySuperFactory.method().then(...);
// now resolve the Promise by flushing.
$httpBackend.flush();
_
そして出来上がり!動的なモックデータをテストに提供できます。
の引数
whenGET('/restpath/api/v1/')
そして
expectGET('restpath/api/v1/books?limit=10&start=1')
異なっています。それらは同じである必要があります。