使用Sinon.js为Angular.js应用程序设置RESTful后端模拟

时间:2013-09-09 10:28:18

标签: javascript json angularjs xmlhttprequest sinon

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

看起来不像"标准" ajax调用获取JSON数据,正如JQuery / Backbone执行的那样,Angular以不同的方式使用XHR,并且它不会被欺骗"通过Sinon试图劫持请求并从客户端做出回应。

我尝试使用$ httpBackend创建带有现成数据的假路由,但是看起来这个服务只用于单元测试,而不是用于" staging环境"我需要设置。

这是我的Sinon设置的样子,它适用于JQuery.ajax,但不适用于Angular $资源,或$ 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应用程序设置这样的模拟?

2 个答案:

答案 0 :(得分:2)

我相信"e2e" (end to end) $httpBackend mock正是您所寻找的。

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

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

我还发现了一个good article描述了在Angular中使用虚假后端的一些优雅方法。

答案 1 :(得分:2)

使用sinon.js或$httpBackend设置完整存根REST服务器真的很麻烦。我建议你使用FakeRest,一个在sinon.js之上构建的虚假REST服务器。

https://github.com/marmelab/FakeRest

免责声明:我们写了它。