2013-10-21 12 views
13

$リソースGETリクエストでURLをパラメータとして渡しています。 Angularはこのパラメータをエンコードするurlで、$ httpBackend.expectGETメソッドのリクエストとの照合は厄介です。

正規表現を使用して予想される要求に一致させることはできますが、動作させることはできません。私はリソースの場所を一致させたいが、任意の "uri"クエリ文字列パラメータの値と一致させたい。なぜ私の

Ctrlキー

var resource = $resource('../api/lookup'); 
resource.get({ uri: "http://www.something.com" }, function (data) { 
    // do something 
}); 

テスト

// mock out the $httpBackend response 

$httpBackend.expectGET(/\.\.\/api\/lookup\?uri=.*/)).respond(200, { Response: "a response" }); 

// call my test method here 

// ensure the $httpBackend work is done 
$rootScope.$apply(); 
$httpBackend.flush(); 

// do assertions 

カルマ出力

Error: Unexpected request: GET ../api/lookup?uri=http%3A%2F%2Fwww.something.com 

Expected GET /../api/lookup?uri=.*/ 

は誰でも見ることができます正規表現は一致していませんか?

編集

さえ示唆したように正規表現を向上した後、私は「$ VAR」注入の構文を使用してこの作業を取得できませんでした。私はテストを書き直し、インジェクション機能の依存性を注入し、テストの順番が正しいことを確認しました。今は魅力のように働いています!

答えて

8

正規表現で疑問符をエスケープする必要があります。

トークンをエスケープせずに、トークンをオプションとしてマークするだけです。

> test = "../api/lookup?uri=http%3A%2F%2Fwww.something.com"; 

> test.match(/\.\.\/api\/lookup?uri=.*/); 
null 

> test.match(/\.\.\/api\/lookup\?uri=.*/); 
["../api/lookup?uri=http%3A%2F%2Fwww.something.com"] 
+0

乾杯に続いているとき。残念ながら、Angularは依然としてリクエストに一致しません。私は全体的な問題を解決することができる場合を見ていきますが、そうでない場合はこれを答えとして受け入れることになります。 – daddywoodland

6

二重スラッシュ\\で疑問符をエスケープする必要がありますか?

$httpBackend.expectGET(/\.\.\/api\/lookup\\?uri=.*/)).respond(200, { Response: "a response" }); 

さらにあなたは、このようなあなたの正規表現を書きたいかもしれません:

new RegExp('../api/lookup\\?uri=.*') 

//構文は、その難しさを持っているエスケープスラッシュが私の正規表現を固定するための修飾によって

関連する問題