关于jQuery ajax调用的模拟成功方法没有按预期工作

时间:2012-01-04 13:04:08

标签: javascript jquery mocking qunit

问题

我正在使用QUnit,并遵循此stackoverflow answer,这似乎适用于该场景。

我尝试提供给'success'方法的数据没有'到达' - 它不是所需的格式,或者是未定义的。我看不出我哪里出错了。

走查

使用DOM元素提供“ methodUnderTest ”的“ unitTest ”方法。 ' methodUnderTest '进行jQuery ajax调用,在单元测试中 mocked 。然后调用成功,执行成功方法的结果形成单元测试断言。

代码

如果您希望看到代码正在执行(无法按预期执行),我已将其设置为 JSFiddle example here 。但是这里有一些,万一我的错误非常明显:

//stubbing the ajax call
jQuery.ajax = function (param) {
    options = param;
};

//the data
var expectedData = jQuery.parseJSON({
        'id': 'fbs',
        'fieldName': 'fbs',
        'data': 'fbs-text'
    });

//call to success method, in unit test
options.success({
    sdata: expectedData,
    textStatus: 'is-this-data-arriving',
    jqXhr: 123
});

//the success method that is failing to get the expected data
function handleSuccess (sdata, textStatus, jqXhr) {
    //problem is here not this success method never gets the data
    console.log('sdata: ' + sdata + '|textStatus:' + textStatus + '|jq:' + jqXhr);
    jQuery('#' + sdata.fieldName + '-loading').attr('alt', 'modified');
};

1 个答案:

答案 0 :(得分:1)

好吧,有一些错误相互干扰。这是一个非常本地化的问题,但现在有了工作代码,如果有人遇到类似的问题,希望这会有所帮助。

工作解决方案

  

http://jsfiddle.net/NickJosevski/9ZZmc/4/

更正代码片段

//1.
//making the parseJSON method work correctly by supplying a single string
//as per http://api.jquery.com/jQuery.parseJSON/

var jsonText = '{"id": "fbs", "fieldName": "fbs", "data": "fbs-text" }'),
    expectedData = $.parseJSON(jsonText);

//2.
//passing the values to the success method correctly
var ignoreParamForThisDemo = null;
options.success(expectedData, ignoreParamForThisDemo , ignoreParamForThisDemo );

//3.
//Other minor issues (broken assert logic) that can be seen in the final solution