【问题标题】:How to test the $.ajax success handler如何测试 $.ajax 成功处理程序
【发布时间】:2017-03-30 21:19:02
【问题描述】:

部分代码仍在使用旧的 success 处理程序,目前难以测试其中的行。

下面是我的示例函数:

function updateXYZExemption(partyId, payload) {

        if (!partyId) {
            throw new Error('partyId is required');
        }

        return $.ajax({
            dataType: 'json',
            contentType: 'application/json',
            type: 'PUT',
            data: JSON.stringify(payload),
            url: config.urls.updateXYZExemptionUrl.replace(/\{partyId\}/, partyId),
            headers: {
                'If-Match': eTag
            },
            success: function (data, textStatus, request) {
                if (request.getResponseHeader('ETag')) {
                    eTag = request.getResponseHeader('ETag');
                }
            }
        });
    }

我可以测试这个函数是否返回了一个承诺,但是分配给成功属性的函数是不可访问的。

【问题讨论】:

  • 然后使其可访问。

标签: jquery ajax jasmine sinon spy


【解决方案1】:

将函数移动到它自己的可测试单元:

var myFunction = function (data, textStatus, request) {
    if (request.getResponseHeader('ETag')) {
        eTag = request.getResponseHeader('ETag');
    }
};

然后您可以独立调用该函数,为其提供模拟,并验证其内部逻辑是否按预期与这些模拟交互并产生预期的结果/效果。

您只需引用该函数即可将其用作成功处理程序:

$.ajax({
    //...
    success: myFunction,
    //...
});

这有效地将正在测试的逻辑(函数)与框架管道(对$.ajax() 的调用)分开。框架管道本身对于单元测试的价值较低,因为此时您实际上只是在测试其他人的代码(框架的)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-20
    相关资源
    最近更新 更多