как смоделировать вызов ajax с помощью теста sencha с extjs - PullRequest
0 голосов
/ 06 июля 2018

Я должен проверить ответ на вызов ajax в моем тесте sencha. Посоветуйте, пожалуйста, как это сделать .. ниже приведен пример кода

beforeEach(()=> {

    sim = Ext.ux.ajax.SimManager.init({});
    controller = Ext.create('xxxx.controller.Search');
    AutoLink = Ext.create('xxxx.model.search.AutoLink', {
        objectType: 'myobj'
    });
});
it('Should run processResponse when doSearch executes', function() {
    const callback = () => {};

    sim.register({
        'abc.com/myurl.aspx': {
            status: 401,
            responseText: JSON.stringify({
                'success': true,
                'data': [{
                    'autoLink': false, 'status': 'OK', 'objectType': 'Person',
                    'results': [{ 'ref': 12345, 'managedBy': '01', 'ethnicAppearance': '1', 'gender': '1', 'rules': ['Forename, surname','nickname, DOB']}],
                    'gridDescriptor': [{'fields': [{'name': 'surname','text': 'Surname','width': 100}],
                        'sortOrders': ['surname','forename1']
                    }]
                }]
            })
        }          
    });

    spyOn(controller, 'doSearch'); // internal method which calls the Ext.Ajax
    spyOn(controller, 'processResponse'); // internal method which process the response        

    controller.doSearch(AutoLink, callback, this); // making an ajax call

    setTimeout(function () {
        expect(controller.processResponse).toHaveBeenCalled();
    }, 1000);
});

теперь при запуске тестового примера вызывается processResponse, что нормально, но я хочу проверить ответ ajax.

1 Ответ

0 голосов
/ 09 июля 2018

Вот как я это делаю:

$.ajax({
                           url: _spPageContextInfo.webServerRelativeUrl + "/_api/web/lists/getbytitle('Test%203')/items(" + itemId + ")/FieldValuesAsText",
                           method: 'GET',
                           headers: {
                               'accept': 'application/json;odata=verbose'
                           }
                       }).then(function (data) {
                           console.log(data);
                          }

Я не знаю, поможет ли это вам достичь именно того, что вы ищете. Но я бы посоветовал дать ему шанс. Затем вы можете перейти к своей консоли и сохранить объект данных в переменную (только для целей отладки) или просто из самой консоли посмотреть цепочку объектов и проверить данные, которые были возвращены вашим вызовом ajax. Так что в моем случае я нашел бы, скажем, имя сотрудника здесь: - data.d.results [0] .PreferredName. Тогда, если я хочу использовать это, я могу просто сохранить это в переменной. Убедитесь, что вы делаете это в функции «затем». Вот пример для сохранения имени в var:

.then(function (data) {
     empName = data.d.results[0].PreferredName;
 }
...