Qunit参数化测试和模拟

36 javascript qunit

我有两个问题:

你能在qunit中进行参数化单元测试吗?

你怎么用qunit嘲笑,比如嘲笑一个getJSON电话?

谢谢

Joh*_*ika 50

对于模拟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);
            }
        });
    };
Run Code Online (Sandbox Code Playgroud)

这是测试用例:

    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');
    });
Run Code Online (Sandbox Code Playgroud)

它基本上覆盖了jQuery的ajax函数,然后检查以下两件事: - 传递给ajax函数的值 - 调用成功回调并声明它执行了它应该执行的操作

  • 我花了大约半个小时才得到这个函数(param){options = param;},但后来它打了我......真的很酷. (4认同)

rah*_*a95 15

您也可以使用.appendTo开发的jQuery Mockjax插件,而不是覆盖jQuery的AJAX函数.这个插件基本上做了另一个答案所暗示的,但它允许更复杂的模拟.例如,如果你有这个功能:

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

你可以通过简单地调用函数mockjax来模拟它,它可以自动包含在jQuery中:

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

第二个模拟函数可以包含在外部JavaScript文件中,比如说"mocks.js",唯一需要做的就是包含mockjax库(可以在https://github.com/appendto找到)/ jquery-mockjax /).唯一要记住的是,这只会模拟jQuery ajax调用,而不是所有XMLHttpRequests.如果你想这样做,那么按照@ bertvh的建议并使用Sinon.js.


ber*_*tvh 5

我刚开始使用Sinon.JS,它允许模拟 XMLHttpRequests并提供一个简单的假服务器API.真的好用!它还提供与qunit的集成.


Ale*_*iuk 5

我的插件实现允许参数化 qunit 测试: https: //github.com/AStepaniuk/qunit-parameterize