使用Jack的Ajax单元测试模拟

时间:2010-02-16 18:56:04

标签: javascript unit-testing qunit

我使用Jack作为JavaScript模拟库。 http://github.com/keronsen/jack。我也在使用qunit。

我在我的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应该有效');   //对象的许多键的类似测试   });

我希望得到一些论据,以便我可以进行一系列测试。

1 个答案:

答案 0 :(得分: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);

第一个版本使用了更多的Jack API(值得更好的文档),并且更具可读性,IMO。

后一版本将为您提供更好的错误报告。