如何模拟 get(id) 请求

2024-03-13

我正在构建一个应用程序原型并尝试模拟 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 匹配的适当用户。

我读到角度文档 http://docs.angularjs.org/api/ngMock/service/%24httpBackend我应该能够用函数替换 RegExp URI。这个想法是从 url 中提取 id 以便在响应方法中使用它。 然后我尝试了这个:

$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 参数始终未定义。有什么想法可以实现我的目标吗?


通过使用new function(url)您的应用程序尝试从匿名函数实例化一个新对象,并将该新对象作为第一个参数传递$httpBackend.whenGET() call.
当然,在打电话的时候whenGET()没有提供 URL,因此它始终是未定义的。

您应该传递函数本身(而不是使用该函数实例化的对象)。例如。:

$httpBackend.whenGET(function (url) {
  ...
}).respond(users[id]);

UPDATE:
经过更多挖掘后发现,将函数作为第一个参数传递给whenGET已在版本中添加1.3.0-beta.3。您正在阅读的文档可能指的是最新的测试版本,而您使用的是早期版本。
(请注意,即使版本 1.3.0-beta.1 和 2 也没有提供此选项。)

无需赘述,负责验证匹配的 URL 是MockHttpExpectation's matchUrl method:

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)) return url(u);是提供直接传递函数选项的选项,并在版本 1.3.0-beta.3 中添加(如前所述)。 但是,如果你仍然想将函数传递给以前的 AngularJS 版本,你可以通过提供一个带有test method.
IE。代替:

.whenGET(function (url) {...})

with:

.whenGET({test: function (url) {...}})

另请参阅此简短的演示 http://jsfiddle.net/ExpertSystem/3YZ9N/.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何模拟 get(id) 请求 的相关文章

随机推荐

  • svn 与 git 浅(稀疏)签出 - 分支、提交

    我有一个非常大的网络项目 有很多 pdf 图像 php 文件 我将文件作为单个项目导入到 svn 中 我使用 svn 浅签出来签出子树的一部分 然后使用工作副本中的分支和标记等来节省空间并加快签出时间 我想知道这是否可以用 git 实现 我
  • 如何在IOS7中使#key和@key可点击

    任何人都知道如何在 IOS7 中的评论文本中使 KEY 和 NAME 可点击 例如 instagram 的做法相同 我正在尝试使用 NSMutableAttributedString 但我不确定如何检测单击事件 在下图中单击 Usernam
  • Windows 上与 taglib 的链接错误

    I built taglibWindows 的静态库如下 必须使用mingw 而不是VS 查看git clone https github com taglib taglib git git taglib 已安装cmake使用来自 cmak
  • 用C++设计事件机制

    我试图在 C 中设计一个通用的 但有些特定于用例的 事件传递机制 而不违背 新风格 C 的原则 同时又不过度使用模板 我的用例有些特殊 因为我需要完全控制事件的分发时间 事件系统是世界模拟的基础 其中世界的每次迭代都会作用于前一帧生成的事件
  • 使用 BOOST 进程在单独的线程中读取子进程标准输出

    我有一个主程序 它使用 boost 进程库来生成一个打印的子进程 Hello World 每 5 秒在其标准输出上一次 我想在主进程中的子进程的标准输出可用时读取 监视它 并在主程序中执行其他操作 我已经尝试过这些例子boost async
  • C++“无原始循环”而不损失性能

    所以 新 旧 大事 是 C 中的 无原始循环 我正在尝试以这种方式编写代码 但似乎效率很低 是的 有些 STL 算法可以做任何事情 但它们似乎效率不高 例如 我有一种情况 我想要一个指向节点数组中得分最高的节点的指针 确定该分数是一项代价高
  • search.maven.org 和 mvnrepository.com 之间的区别

    有什么区别https search maven org https search maven org and https mvnrepository com https mvnrepository com search maven org
  • 如何将 paypal 购物车中的数量设置为零

    每当我尝试从自己的 PayPal 表单订购商品时 所有值都必须大于 0 如何才能使其仅订购一件商品 而另一件商品设置为零 错误消息 您输入了无效的数量值 数量值必须是大于或等于 1 的整数 示例代码 JSFiddle http jsfidd
  • 如何在 python pandas 中使用带有 bool 的查询函数?

    我正在尝试做类似的事情 df query column a count but with df query column False count 正确的使用方法是什么query带有布尔列 这简直就是 column False gt gt g
  • 使用phonegap在eclipse for android中SQLite数据库的位置

    我正在使用phonegap 并为android 开发html 页面 但我不知道如何在使用Eclipse Juno 中查看表及其相应的数据库 我知道它在 DDMS 中的某个地方 任何人都可以告诉我我的表和数据库在 SQLite 中的路径 沿着
  • R:添加两个数据帧(不同的行数)

    我有一个数据框 df1 Type CA AR Total alpha 2 3 5 beta 1 5 6 gamma 6 2 8 delta 8 1 9 我有另一个数据框 df2 Type CA AR Total alpha 3 4 7 be
  • 将命令的输出分配给变量

    我必须在空格后面剪切字符串并将值存储在空格之前 我的示例脚本如下所示 tString This is my name echo tString cut d f1 output This 现在我想将此输出值分配给变量 我的脚本是 tStrin
  • 如何使用seaborn在分类数据上获取条形图上的标签值

    下面显示的是用于获取 seaborn 上分类数据的条形字符的语法 import seaborn as sn import matplotlib as mpl import matplotlib pyplot as plt IN data c
  • Ruby Net::HTTP::Get 和 JSON 响应

    我正在尝试连接到 API 并使用 Rails 应用程序检索 json 结果 但它似乎不起作用 举个例子 request Net HTTP Get new http example com search thing format json 当
  • “#selector”的参数不引用“@objc”方法、属性或初始值设定项

    谁能告诉我为什么这段代码给出错误消息 selector 的参数没有引用 objc 方法 属性或初始值设定项 timer Timer scheduledTimer timeInterval 0 1 target self selector s
  • 如何将接口 {} 转换为结构体

    我一直在寻找如何将接口转换为结构 但我不知道我怎么做不到 我会尽力解释我的问题 type Result struct Http code int Http msg string Response interface 该结构由向服务器发出 H
  • WCF场景下的自签名证书性能

    我读到自签名证书存在性能问题 例如 here http weblogs asp net cibrax archive 2006 08 08 Creating X509 Certificates for WSE or WCF aspx 但具体
  • 如何在 ESM 中导出以连字符命名的变量

    CJS exports foo bar gt OK ESM exports foo bar gt NG export foo bar gt NG export foo bar gt NG export fooBar as foo bar g
  • iPhone:如何下载媒体文件并将其保存在设备上

    我是 iO 世界的新手 我需要帮助来在我的应用程序中实现小功能 我的问题是如何下载媒体文件 即 mp4 并将其保存在设备上以供以后使用 当然 保存文件的位置应该只能从我的应用程序访问 类似于Android中的Context getCache
  • 如何模拟 get(id) 请求

    我正在构建一个应用程序原型并尝试模拟 REST Web 服务 这是我的代码 var mock angular module mock ngMockE2E mock run function httpBackend users id 1 na