0

我可以用这两种工具伪造 ajax。Sinon 允许创建便于测试的 stub/spy/mock,而 mockjax 则不允许。在伪造 ajax 调用方面,mockjax 是否提供了比 Sinon 更多的功能?因为如果没有,那么两者都使用没有意义。

var response = [];
var statusCode = 200;
var responseTime = 0;

示例如何使用 mockjax 伪造 ajax 调用:

$.mockjax({
    url: server_api_url + "/Something/GetData",
    status: statusCode,
    responseTime: responseTime,
    contentType: "application/json",
    responseText: response
});

示例如何使用 Sinon.js 伪造 ajax 调用:

var def = $.Deferred();
var stubGetData = sinon.stub(serverApiForSomething, "GetData");
def.resolve(response);
stubGetData.returns(def);

其中 serverApiForSomething 是一个封装 ajax 调用的全局类。

ServerApiForSomething = function()
{
    var self = this;
    self.GetData = function(param)
    {
        var ajaxOption = 
        {
            url:server_Api_Url + "/Something/GetData",
            type: "GET",
            data: { param.toJSON() },
            contentType: "application/json",
            dataType: "json"
        }
        return $.ajax(ajaxOption);
    }
}

serverApiForSomething = new ServerApiForSomething();
4

2 回答 2

1

我是 Mockjax 插件的维护者。我同意@AXMIM 的评论,即 Mockjax 有一些很酷的内置功能,专门用于模拟 ajax 调用,但它也只打算与 jQuery 一起使用,因为 Sinon 可以与任何框架一起使用(但没有尽可能多的内置很酷的东西)。

也就是说,查看您的代码,您并没有真正使用 Sinon 代码模拟 Ajax 调用,而是在模拟GetData方法。这也很酷,但并不是 Mockjax 的真正意义所在,它将 Ajax 调用从图片中移除,但将其他所有内容保留在原处。恰当的比较是使用诗乃FakeServer特征

真的,你可以同时使用两者,如果你更喜欢 Mockjax 的语法,然后用它来模拟 Ajax,并使用 Sinon 监视成功和错误处理程序。

于 2015-12-14T15:29:42.270 回答
0

草稿答案
虽然两者都可以伪造 ajax 调用,但 mockjax 提供了更多内置功能。但是,这些功能实际上是关于“ajax 调用”的,如果您只需要使用基本的“成功”/“失败”行为来伪造 ajax 调用,那么这些功能就太多了。

例如,使用 mockjax,您可以

  • 设置响应状态“404、200、500等”。
  • 随机化响应时间
  • 通话超时
  • ETC

请参阅此处的mockjax 文档
使用 mockjax,您还可以找到所有没有被伪造的 ajax 调用。这真的很有用。

因此,除非您需要伪造更多然后失败/成功和返回的值,否则 sinon 已经足够且更易于使用,因为您无需为路由和其他相关内容而烦恼。

于 2015-10-23T19:12:15.580 回答