2010-02-16 73 views
5

我使用Jack作爲JavaScript嘲笑庫。 http://github.com/keronsen/jack。我也在使用qunit。使用Jack的Ajax單元測試嘲笑

我在我的JavaScript代碼中有以下AJAX調用,我正在寫測試。

$.ajax({ 
    url: $('#advance_search_form').attr('action'), 
    type: 'post', 
    dataType: 'json', 
    data: parameterizedData, 
    success: function(json) { 
     APP.actOnResult.successCallback(json); 
    } 
}); 

以下代碼正在工作。

jack(function() { 
    jack.expect('$.ajax').exactly('1 time'); 
} 

但是我想測試所有參數是否正確提交。我試過但沒有工作。

jack.expect('$.ajax').exactly('1 time').whereArgument(0).is(function(){ 

var args = arguments; ok('http://localhost:3000/users',args.url,'url should be valid'); //相似物體的許多鍵的相似測試 });

我想獲得一些參數,以便我可以執行一系列測試。

回答

4

兩種方法:

使用.hasProperties():

jack.expect('$.ajax').once() 
    .whereArgument(0).hasProperties({ 
     'type': 'post', 
     'url': 'http://localhost:3000/users' 
    }); 

...或捕捉的參數並進行qunit斷言:

var ajaxArgs; 
jack.expect('$.ajax').once().mock(function() { ajaxArgs = arguments[0]; }); 
// ... the code that triggers .ajax() 
equals('http://localhost:3000/users', ajaxArgs.url); 

第一個版本使用更多的傑克API(值得更好的文檔),更易讀,海事組織。

後一版本會給你更好的錯誤報告。

+0

真棒。感謝您的快速查找。 –

+0

花兩分鐘時間將兩種方法添加到jack的README中。傑克再次做得好。我喜歡它。 –

+0

第一種方法正在工作。第二種方法失敗。參數和參數[0]都報告爲未定義。 –