我正在开发一个 Angular.js 应用程序,它具有扩展 $resource 服务的 RESTful 服务。这个应用程序将来会连接到 Java Spring 应用程序,但现在我正在尝试设置一个隔离的模拟,它将为我的应用程序从客户端提供所有必要的路由。我之前使用 Sinon.js 创建了一个伪造的客户端服务器,当我使用其他 MV* 框架(例如 Backbone.js)开发其他应用程序时,它为我的路由提供服务。
看起来,与 JQuery/Backbone 执行的用于获取 JSON 数据的“标准”ajax 调用不同,Angular 使用 XHR 的方式不同,它并没有被 Sinon 从客户端劫持请求和响应的尝试“愚弄”。
我尝试使用 $httpBackend 创建带有现成数据的虚假路由,但似乎该服务仅用于单元测试,而不用于我需要设置的“暂存环境”。
这是我的 Sinon 设置的样子,它适用于 JQuery.ajax,但不适用于 Angular $resource 或 $http:
var server = sinon.fakeServer.create();
server.respondWith("GET", /mydata/gi, [200,
{ "Content-Type": "application/json" },
JSON.stringify({
data: "myData"
})
]);
server.autoRespond = true;
关于这如何不适用于 Angular 的任何想法?或者更好的是,有人知道如何为 Angular 应用程序设置此类模拟吗?
最佳答案
我相信"e2e" (end to end) $httpBackend mock正是您要寻找的。
引用文档: “对于适合端到端测试或无后端开发的假 HTTP 后端实现,请参阅 e2e $httpBackend mock。”
“与单元测试相反,在端到端测试场景中或在开发应用程序时将真实后端 api 替换为模拟的场景中,通常希望绕过某些类别的请求模拟并发出真正的 http 请求(例如从网络服务器获取模板或静态文件)。”
我还找到了一个 good article描述一些在 Angular 中使用假后端的优雅方法。
关于javascript - 使用 Sinon.js 为 Angular.js 应用程序设置 RESTful 后端模拟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18696204/