Подтвердить что ты не робот

Qunit параметризует тесты и насмехается

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

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

Как вы издеваетесь над qunit, например. издевательский вызов getJSON?

Спасибо

4b9b3361

Ответ 1

Для издевательских запросов 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');
    });

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

Ответ 2

Вместо переопределения функции jQuery 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"}';
    }
});

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

Ответ 3

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