簡體   English   中英

Qunit參數化測試和模擬

[英]Qunit parameterized tests and mocking

我有兩個問題:

你能在qunit中進行參數化單元測試嗎?

你如何使用qunit進行模擬,例如模擬getJSON調用?

謝謝

對於模擬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函數,然后檢查以下兩件事: - 傳遞給ajax函數的值 - 調用成功回調並聲明它執行了它應該執行的操作

您也可以使用.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!");
    }
});

你可以通過簡單地調用函數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。

我剛開始使用Sinon.JS ,它允許模擬 XMLHttpRequests並提供一個簡單的假服務器API。 真的好用! 它還提供與qunit的集成。

有我的addon實現允許參數化qunit測試: https//github.com/AStepaniuk/qunit-parameterize

請參閱此鏈接以模擬setup / teardown方法中的getJSON調用, http: //www.ajaxprojects.com/ajax/tutorialdetails.php?item = 505

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM