Qunit параметризованные тесты и макеты - PullRequest
35 голосов
/ 07 февраля 2009

У меня два вопроса:

Можете ли вы иметь параметризованные модульные тесты в qunit?

Как вы умеете насмехаться с Qunit, например? высмеивать getJSON звонок?

Спасибо

Ответы [ 5 ]

49 голосов
/ 24 января 2010

Для насмешливых запросов ajax, вы можете попробовать что-то вроде этого ...

Вот функция, которую вы хотите проверить:

    var functionToTest = function () {
        $.ajax({
            url: 'someUrl',
            type: 'POST',
            dataType: 'json',
            data: 'foo=1&foo=2&foo=3',
            success: function (data) {
                $('#main').html(data.someProp);
            }
        });
    };

Вот контрольный пример:

    test('ajax mock test', function () {
        var options = null;
        jQuery.ajax = function (param) {
            options = param;
        };
        functionToTest();
        options.success({
            someProp: 'bar'
        });
        same(options.data, 'foo=1&foo=2&foo=3');
        same($('#main').html(), 'bar');
    });

Она по существу переопределяет ajax-функцию jQuery и затем проверяет следующие 2 вещи: - значение, которое было передано функции ajax - вызывает обратный вызов успеха и утверждает, что он сделал то, что должен был сделать

15 голосов
/ 16 июля 2012

Вместо переопределения функции jJuery AJAX вы также можете использовать плагин jQuery Mockjax, разработанный .appendTo. Этот плагин, по сути, делает то, что предлагает другой ответ, но он допускает гораздо более изощренную насмешку. Например, если у вас есть функция:

$.ajax({
    url:"/api/user",
    type:"GET",
    dataType:"json",
    data:'{"uid":"foobar"}',
    success:function(data){
        console.log("Success!");
    },
    error:function(data){
        console.log("Error!");
    }
});

Вы можете смоделировать его с помощью mockjax, просто вызвав функцию mockjax, которая автоматически включается в jQuery:

$.mockjax({
    url:"/api/user",
    type:"GET",
    response:function(requestData){
         //handle the mock response in here
         this.responseText = '{"fullname":"Mr. Foo Bar"}';
    }
});

Вторая функция насмешки может быть включена во внешний файл JavaScript, скажем, «mocks.js», и единственное, что нужно сделать, это включить библиотеку mockjax (которую можно найти в https://github.com/appendto/jquery-mockjax/). Единственное, что нужно иметь в виду, это то, что это будет только издеваться над вызовами jQuery ajax, а не всеми XMLHttpRequests. Если вы хотите это сделать, то следуйте совету @ bertvh и используйте Sinon.js.

5 голосов
/ 22 февраля 2011

Я только начал использовать Sinon.JS , который позволяет имитировать XMLHttpRequests, а также предлагает простой API-интерфейс поддельного сервера. Действительно прост в использовании! Он также предлагает интеграцию с Qunit.

4 голосов
/ 15 ноября 2012

Существует моя реализация аддона, которая позволяет параметризовать тесты qunit: https://github.com/AStepaniuk/qunit-parameterize

1 голос
/ 18 февраля 2010

Смотрите эту ссылку, чтобы смоделировать вызов getJSON в ваших методах установки / разрыва, http://www.ajaxprojects.com/ajax/tutorialdetails.php?itemid=505

...