使用Dojo XHR模拟AJAX调用

时间:2011-02-06 23:32:32

标签: dojo

我试图模仿dojo xhr请求的响应,但我还没有找到一个好的解决方案。

理想情况下,我希望看到类似于jQuery mockjax plugin的解决方案,我可以根据网址设置特定的调用,例如:

 $.mockjax({
  url: '/restful/fortune',
  responseTime: 750,
  responseText: {
    status: 'success',
    fortune: 'Are you a turtle?'
  }
 });

我最初的想法是利用“/ dojo / io / send”通道,但在修改dojo Deferred对象后,我无法获得修改后的响应。

另一个想法是使用传递方法来确定是否应该发出实际的xhr请求,例如:

function xhrRequest(xhrArgs) {
   if(shouldMock) {
      var fakeReturnJson = dojo.toJson({
        howdy: "that's odd!",
        isStrange: false
      }); 
      return fakeReturnJson;
   } else {
      dojo.xhr(xhrArgs);
   }

}

有人可以告诉我嘲笑dojo xhr电话的最佳方法吗?

谢谢!

3 个答案:

答案 0 :(得分:2)

这是一个老问题,但我认为你应该使用Sinon.js

进行嘲弄

但是,您需要输入以下内容:

has: { native-xhr2: false }

进入你的dojoConfig,让它在1.8

中工作

答案 1 :(得分:0)

我没有听说任何类似于Mockjax的Dojo特定库。但我认为你可以尝试使用Mockjax和Dojo。这应该很容易做到,因为您只需要在开发期间使用JQuery进行Mockjax测试,然后在开发完成后将其删除。

答案 2 :(得分:0)

我使用你的第二个建议。目前,我有一个传输层(简单的js类)和2个实现(XhrTransport和MockTransport)。然后我切换到我需要的而不更改小部件代码。 小部件使用以下命令调用服务器:

Controller.send(aServerCall); 

其中aServerCall是一个带有服务器端点,参数和回调的简单值对象。

这样,您可以向控制器添加适用于所有服务器调用的好东西(例如日志记录,分析,通用错误处理......),并在进行单元测试时模拟整个服务器。 对于MockTransport,我只是以小部件期望的格式从静态.js文件返回封装的json数据。