2013-10-21 3 views
13

URL을 $ resource GET 요청의 매개 변수로 전달 중입니다. 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=.*') 

// 구문은 어려움이있는 탈출 슬래시가 내 정규식을 고정에 대한 수정에 의해