5

我正在开发一个 Angular.js 应用程序,它具有扩展 $resource 服务的 RESTful 服务。这个应用程序将来会连接到 Java Spring 应用程序,但现在我正在尝试设置一个隔离的模拟,它将为我的应用程序从客户端提供所有必要的路由。当我使用其他 MV* 框架(例如 Backbone.js)开发其他应用程序时,我之前使用 Sinon.js 创建了一个假客户端服务器,为我的路由提供服务。

看起来,与获取 JSON 数据的“标准”ajax 调用不同,正如 JQuery/Backbone 执行的那样,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 应用程序设置这样的模拟吗?

4

2 回答 2

2

我相信“e2e”(端到端)$httpBackend 模拟正是您正在寻找的。

引用文档:“对于适合端到端测试或无后端开发的虚假 HTTP 后端实现,请参阅e2e $httpBackend mock。”

“与单元测试相反,在端到端测试场景中,或者在开发应用程序时将真正的后端 api 替换为模拟的场景中,通常需要某些类别的请求绕过模拟和发出一个真正的 http 请求(例如从网络服务器获取模板或静态文件)。”

我还找到了一篇很好的文章,描述了在 Angular 中使用假后端的一些优雅方法。

于 2013-09-18T17:09:51.000 回答
2

使用 sinon.js 或$httpBackend. 我建议你使用 FakeRest,一个建立在 sinon.js 之上的假 REST 服务器。

https://github.com/marmelab/FakeRest

免责声明:我们写的。

于 2015-03-25T08:59:01.040 回答