Предоставляет ли mockjax больше функциональности, чем sinon.js для фальсификации вызовов ajax?

Я могу подделать Ajax с обоими этими инструментами. Sinon позволяет создавать заглушки / шпионы / макеты, которые пригодятся для тестирования, а mockjax - нет. Когда дело доходит до фальсификации вызова ajax, предоставляет ли mockjax больше возможностей, чем Sinon? Потому что, если это не так, нет смысла использовать их обоих.

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

Пример того, как подделать вызов ajax с помощью mockjax:

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

Пример того, как подделать вызов ajax с помощью Sinon.js:

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 ответа

Я поддерживаю плагин Mockjax. Я бы согласился с комментариями @AXMIM о том, что Mockjax имеет несколько классных встроенных функций, специально предназначенных для имитации вызовов ajax, но он также предназначен только для использования с jQuery, где Sinon можно использовать с любой платформой (но не совсем как много встроенных прикольных вещей).

Тем не менее, глядя на ваш код, вы на самом деле не издеваетесь над вызовом Ajax с этим кодом Sinon, вы высмеиваете GetData метод. Это тоже круто, но на самом деле не главное в Mockjax, то есть вывести вызов Ajax из картинки, но оставить все остальное на месте. Правильное сравнение использует Синона FakeServer особенность

В самом деле, вы можете использовать оба, если вам нравится синтаксис Mockjax лучше, затем использовать его для насмешки Ajax, и использовать Sinon, чтобы шпионить за обработчиками успеха и ошибок.

Черновой ответ
Хотя оба могут подделывать вызов ajax, mockjax предоставляет больше встроенных функций. Тем не менее, эти функции действительно относятся к "вызову ajax" и их слишком много, если вам нужно только имитировать вызов ajax с базовым поведением "преуспел"/"провал".

Например, с mockjax вы можете

  • установите статус ответа "404, 200, 500 и т. д.".
  • рандомизировать время, необходимое для ответа
  • тайм-аут вызова
  • так далее

Смотрите документацию по mockjax здесь
С mockjax вы также можете найти все вызовы ajax, которые были сделаны без подделки. Это действительно полезно.

Таким образом, если вам не нужно притворяться больше, чем неудача / успех и возвращаемое значение, sinon вполне достаточно и проще в использовании, так как вам не нужно беспокоиться о маршруте и других связанных вещах.

Другие вопросы по тегам