angularjs – 如何模拟get(id)请求
我正在构建一个应用程序原型并尝试模拟REST Web服务.
这是我的代码: var mock = angular.module('mock',['ngMockE2E']); mock.run(function($httpBackend){ users = [{id:1,name:'John'},{id:2,name:'Jack'}]; $httpBackend.whenGET('/users').respond(users); $httpBackend.whenGET(new RegExp('/users/[0-9]+')).respond(users[0]); } 一切正常,我的资源User.query()返回所有用户,User.get({id:1})和User.get({id:2})返回相同的用户(John). 现在为了改进我的原型,我想返回适当的用户,匹配好的id. 我在the angular documentation读到我应该能够用函数替换RegExp URI.我们的想法是从url中提取id以在response方法中使用它. $httpBackend.whenGET(new function(url){ alert(url); var regexp = new RegExp('/users/([0-9]+)'); id = url.match(regexp)[1]; return regexp.test(url); }).respond(users[id]); 问题是url参数始终未定义.有什么想法实现我的目标? 解决方法
通过使用新函数(url),您的应用程序尝试从您的匿名函数实例化一个新对象,并将该新对象作为$httpBackend.whenGET()调用的第一个参数传递.
当然,在调用whenGET()时没有提供URL,因此它总是未定义的. 您应该传递函数本身(而不是使用该函数实例化的对象).例如.: $httpBackend.whenGET(function (url) { ... }).respond(users[id]); 更新: 没有详细说明,负责验证匹配的URL是MockHttpExpectation的matchUrl方法: function MockHttpExpectation(method,url,data,headers) { ... this.matchUrl = function(u) { if (!url) return true; if (angular.isFunction(url.test)) return url.test(u); if (angular.isFunction(url)) return url(u); // <<<<< this line does the trick return url == u; }; 行if(angular.isFunction(url))返回url(u);是一个提供直接传递函数的选项,并在版本1.3.0-beta.3中添加(如上所述). .whenGET(function (url) {...}) 有: .whenGET({test: function (url) {...}}) 另见这short demo. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |