2010-02-16 32 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]都报告为未定义。 –