【问题标题】:Ajax unit testing mocking using Jack使用 Jack 进行 Ajax 单元测试模拟
【发布时间】:2010-02-16 18:56:03
【问题描述】:

我使用 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 = 参数; ok('http://localhost:3000/users', args.url, 'url 应该是有效的'); // 对对象的许多键进行相似测试 });

我想掌握论据,以便进行一系列测试。

【问题讨论】:

    标签: javascript unit-testing qunit


    【解决方案1】:

    两种方法:

    使用 .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。

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

    【讨论】:

    • 太棒了。感谢您的快速浏览。
    • 花两分钟时间将这两种方法添加到 jack 的 README 中。杰克再次做得很好。我喜欢它。
    • 第一种方法有效。第二种方法失败了。 arguments 和 arguments[0] 都报告为未定义。
    • 奇怪。尝试用 function(a) { ajaxArgs = a; 替换函数部分}
    • 是的,做到了。将 a 传递给函数解决了这个问题。非常感谢。
    猜你喜欢
    • 2012-02-16
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    • 1970-01-01
    • 1970-01-01
    • 2018-09-04
    • 2013-11-12
    • 2018-11-21
    相关资源
    最近更新 更多