mockjax是否提供了更多功能,然后sinon.js伪造ajax调用?

时间:2015-06-11 19:52:13

标签: ajax mocking sinon mockjax

我可以使用这两种工具伪造ajax。 Sinon允许创建stub / spy / mock,这对于测试来说很方便,而mockjax却没有。 当它伪造ajax调用时,mockjax会提供更多的功能吗? 如果没有,那么就没有必要同时使用它们。

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();

2 个答案:

答案 0 :(得分:1)

我是Mockjax插件的维护者。我同意@ AXMIM的评论,Mockjax有一些很酷的内置功能专门用于模拟ajax调用,但它也只是用于jQuery,其中Sinon可以用于任何框架(但不是#39; t内置很酷的东西。)

那就是说,看看你的代码,你并没有真正使用Sinon代码模拟Ajax调用,而是嘲笑GetData方法。这也很酷,但实际上并不是Mockjax的观点,即将Ajax调用从图片中删除,但保留其他所有内容。正确的比较是使用Sinon's FakeServer feaure

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

答案 1 :(得分:0)

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

例如,使用mockjax,您可以

  • 设置响应状态“404,200,500等”。
  • 随机化回复时间
  • 超时通话
  • etc

参见mockjax文档here
使用mockjax,您还可以找到所有未经伪造的ajax调用。这非常有用。

所以,除非你需要假装更多然后失败/成功并返回值,sinon足够且更容易使用,因为你不需要打扰路线和其他相关的东西。