匹配所有GET url使用角度模拟后端

时间:2014-02-24 09:00:28

标签: javascript ajax regex angularjs angular-mock

我现在正在写一个没有后端ajax的前端。我正在使用angular-mocks来模拟API调用:

$httpBackend.when('GET', '/somelink').respond(function(method, url, data) {
  //do something
});

但是,如果ajax通过params: {id:12345},则会将其附加到网址'/somelink?id=12345'when('GET', '/somelink')

不会捕获

有没有办法使用RegEx或一些技巧来解决这个问题?这样,无论params内部是什么,respond()仍会被调用?

感谢。

更新1:

我无法使用.whenGET,因为我的后端系统也有POSTPUT。所以我需要保持它的通用性。这两个参数.when('GET', '/somelink')实际上是我代码中的变量。

由于'/somelink'是另一个JSON中的变量,因此在JSON中使用RegEx /\/somelink/似乎不起作用。至少那是我现在看到的。

2 个答案:

答案 0 :(得分:8)

是的,您可以使用这样的正则表达式:

$httpBackend.whenGET(/\/somelink/).respond(function(method, url, data) {
    //do something
});

修改

好的,你可以这样做:

var method = 'GET';
var url = '/somelink';
$httpBackend.when(method, new RegExp('\\' + url)).respond(function(method, url, data) {
    //do something
});

答案 1 :(得分:3)

网址可以是RegExp对象,也可以是具有方法test的任何对象。

要匹配查询参数,您可以使用以下内容:

var somelinkPattern = /^\/somelink(?:\?(.*))?$/;
$httpBackend.when('GET', somelinkPattern).respond(function(method, url, data) {
  var query = somelinkPattern.exec(url)[1];
  // url = "/somelink?abc=123" -> query = "abc=123"
});

要使用可选的查询字符串从字符串网址创建模式,您可以使用:

var targetUrl = "/somelink";
var pattern = new RegExp(
    "^" +
    targetUrl.replace(/[-[\]{}()*+?.\\^$|]/g, "\\$&") + /* escape special chars */
    "(?:\\?.*)?$");
$httpBackend.when('GET', pattern).respond(function(method, url, data) {
  var queryMatch = /^[^#]*\?([^#]*)/.exec(url);
  var query = queryMatch ? queryMatch[1] : "";
  // url = "/somelink?abc=123" -> query = "abc=123"
});