2013-10-21 4 views
13

Sto passando un url come parametro in una richiesta GET di $ resource. Angolare è l'url che codifica questo parametro e che corrisponde alla richiesta nel metodo $ httpBackend.expectGET è schizzinoso.

Vedo che è possibile utilizzare le espressioni regolari per abbinare la richiesta prevista ma non è possibile farlo funzionare. Mi piacerebbe abbinare la posizione della risorsa, ma con qualsiasi valore del parametro stringa di query "uri".

Ctrl

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

prova

// 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 

Karma uscita

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

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

Qualcuno può capire perché il mio regex non è stato abbinato?

Modifica

Anche dopo il miglioramento della regex come suggerito non ho potuto ottenere questo lavoro utilizzando il '$ var' sintassi iniezione. Ho riscritto i test, iniettando le dipendenze con la funzione inject e assicurando che l'ordine del mio test fosse corretto. Ora funziona come un fascino!

risposta

8

È necessario sfuggire al punto interrogativo nella propria espressione regolare.

Senza sfuggire, si contrassegna il token prima di esso come facoltativo.

> 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

acclamazioni per il fissaggio mia regex . Sfortunatamente Angular continua a non corrispondere alla richiesta. Continuerò a cercare nel caso in cui riesca a risolvere il problema generale, ma se non lo farò tornerò ad accettarlo come risposta. – daddywoodland

6

È necessario sfuggire al punto interrogativo con una doppia barra \\?

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

inoltre si potrebbe desiderare di scrivere l'espressione regolare in questo modo:

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

l'// sintassi ha le sue difficoltà quando un barra sfuggito è seguito da un modificatore