带有查询参数的$ httpBackend请求

时间:2015-08-14 06:52:27

标签: angularjs httpbackend

$httpBackend.whenGET('/restpath/api/v1/books')
.respond({// some data}); 

我收到以下错误

Error: Unexpected request: GET /restpath/api/v1/books
 Expected GET /restpath/api/v1/books?limit=10&start=1

对于expectGET,我有以下内容,这会创建动态查询字符串。主要是'start'参数,以及whenGET部分,我试图根据'start'服务器动态内容

$httpBackend.expectGET('/restpath/api/v1/books?limit=10&start=1'); // the actual service goes here , which does the $http service. we don't care $httpBackend.flush();

3 个答案:

答案 0 :(得分:22)

(适用于版本低于v1.5.0-build.4371的角度应用)

如果您不关心'?'之后的参数你可以这样做:

func (r *T) area() int // 1
func (r T) area() int  // 2

如果您关心第一个参数,请执行以下操作:

$httpBackend.expectGET(/.*?restpath\/api\/v1\/books?.*/g).respond(200, '{}');

如果你关心他们,所有人都这样做:

$httpBackend.expectGET(/.*?restpath\/api\/v1\/books?limit=10.*/g).respond(200, '{}');

答案 1 :(得分:13)

修改

截至v1.5.0-build.4371,文档声明响应回调接受params参数。

  

默认情况下,请求URL上的查询参数被解析为   params对象。所以请求URL为/ list?q = searchstr& orderby = -name   将params设为{q:'searchstr',orderby:' - name'}

因此对'/restpath/api/v1/books?limit=10&start=1'你会得到:

$httpBackend
   .whenGET('/restpath/api/v1/books?limit=10&start=1')
   .respond(function(method, url, data, headers, params) {

    // params will be {
    //   limit: 10,
    //   start: 1
    // }

   });

<强> PREVIOUS

  1. 您使用

    • .expectGET()如果你想让$ httpBackend在不匹配时抛出异常。
    • .whenGET()在其他情况下。
  2. .respond()状态Array可以接受function(method, url, data, headers) {};或者.respond() 回调函数,签名为:// inspired by Andy E // @https://stackoverflow.com/users/94197/andy-e function matchParams(query) { var match; var params = {}; // replace addition symbol with a space var pl = /\+/g; // delimit params var search = /([^&=]+)=?([^&]*)/g; var decode = function (s) { return decodeURIComponent(s.replace(pl, " ")); }; while (match = search.exec(query)) params[decode(match[1])] = decode(match[2]); return params; }

  3. 既然我们知道如何访问请求网址,为了提供动态内容,我们可以使用辅助函数(例如// we use a regex to be able to still respond to // dynamic parameters in your request var urlRegex = /\/restpath\/api\/v1\/books\?limit=(\d+)&start=(\d+)/; $httpBackend .whenGET(urlRegex) .respond(function(method, url){ // send only the url parameters to the helper var params = matchParams(url.split('?')[1]); // params is now an object containing // {limit: 10, start:1} // so do whatever you want with it. var dynamicData = getMockData(params.start); // don't forget to return. return [200, dynamicData]; }); mySuperFactory.method().then(...); // now resolve the Promise by flushing. $httpBackend.flush(); 发布的函数解析我们在TKey回调中收到的网址。 3}}在此docs中:

    TValue

    在我们的范围内使用此帮助程序,我们可以知道构建动态响应,例如:

    TValue

    瞧!您可以为测试提供动态模拟数据。

答案 2 :(得分:3)

的参数

whenGET('/restpath/api/v1/')

expectGET('restpath/api/v1/books?limit=10&start=1')

是不同的。它们应该是一样的。