Подтвердить что ты не робот

Как использовать регулярное выражение в AngularJS $httpBackend ExpectGET

Я передаю URL-адрес в качестве параметра в запросе GET $resource. Angular - это URL-код, кодирующий этот параметр, и сопоставление запроса в методе $httpBackend.expectGET является исчерпывающим.

Я вижу, что вы можете использовать регулярные выражения для соответствия ожидаемому запросу, но не можете заставить его работать. Я хотел бы сопоставить местоположение ресурса, но с любым значением параметра строки запроса uri.

Ctrl

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

Test

// 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=.*/

Может ли кто-нибудь понять, почему мое регулярное выражение не сопоставляется?

Edit

Даже после улучшения регулярного выражения, как было предложено, я не мог получить эту работу, используя синтаксис "$ var". Я переписал тесты, введя зависимости с помощью функции инъекции и убедившись, что порядок моей тестовой компоновки верен. Теперь он работает как шарм!

4b9b3361

Ответ 1

Вам нужно избежать вопросительного знака в вашем регулярном выражении.

Не ускользая от него, вы просто отмечаете токен перед ним как необязательный.

> 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"]

Ответ 2

Вам нужно избежать вопросительного знака с двойной косой чертой \\?

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

дополнительно вы можете написать свое регулярное выражение следующим образом:

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

Синтаксис//имеет свои трудности, когда за экранированной косой чертой следует модификатор