我正在使用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');
};
答案 0 :(得分:1)
好吧,有一些错误相互干扰。这是一个非常本地化的问题,但现在有了工作代码,如果有人遇到类似的问题,希望这会有所帮助。
//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