Метод успешной посмешищения при вызове jQuery ajax не работает должным образом - PullRequest
1 голос
/ 04 января 2012

Задача

Я использую QUnit и следую этому ответу stackoverflow , который, кажется, работает в этом сценарии.

Данные, которые я пытаюсь передать в метод «success», не «поступают» - они не в требуемом формате или поступают как неопределенные. Я не вижу, где я иду не так.

Walk-через

Метод ' unitTest ', который снабжает мой ' methodUnderTest ' элементом DOM. methodUnderTest делает ajax-вызов jQuery, который mocked в модульном тесте. Затем вызывается success, и результат выполнения метода success формирует утверждение модульного теста.

код

Я настроил это как пример JSFiddle здесь , если вы хотите видеть выполнение кода (не выполняется должным образом). Но вот некоторые из них, на случай, если моя ошибка станет очевидной:

//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 Ответ

1 голос
/ 05 января 2012

Хорошо, было несколько ошибок, которые мешали друг другу. Это была довольно локализованная проблема, но с рабочим кодом здесь и сейчас, если кто-то сталкивается с подобной проблемой, надеюсь, это будет полезно.

Рабочий раствор

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
...