Извлечение JSON в транспортир и сравнение его с данными, отправленными из серверной части

0

Я пытаюсь автоматизировать мое веб-приложение, передний конец которого находится в угловом режиме и используется транспортир. Теперь я также хочу выполнить тестирование api только с помощью транспортира. Подобно отправке данных с бэкэнд должны быть такими же, как и данные, полученные в переднем конце, когда выполняется ajax-вызов, и JSON извлекается. Не удалось найти решение. Прошли многие ссылки, но решения пока нет.

Доступ к данным $ http в тестах Protractor/E2E (AngularJS)

Вот что я tried-

describe('TestApp',function()
{
    var scope,
            beforeEach(inject(function($rootScope,$controller,$httpBackend){
                scope=$rootScope.$new();
                httpBackend=$httpBackend;
                httpBackend.when("POST","path/to/php/ajax.php").respond([{},{},{}]);

            }));
         it("abc",function(){
             httpBackend.flush();
             expect(scope.data.length).toBe(3);
         });
     });
});
Теги:
protractor
automated-tests

1 ответ

0

Я потратил много часов, пытаясь найти решение этой проблемы. Я решил, что лучший способ действий для меня состоял в том, чтобы высмеять бэкэнд (https://docs.angularjs.org/api/ngMockE2E/service/ $ httpBackend), чтобы перехватить вызов api. Внутри ответа я прикрепил новый элемент к HTML-странице. Затем вы можете разместить JSON внутри элемента и захватить данные из элемента в вашем тесте.

$httpBackend.whenPUT(/\/api\/\/.*/).respond(function(method, url, data, headers) {
    var e = document.createElement('div');
    e.setAttribute('class', 'class-name'); //adds an identifier to more easily grab the data
    var jd = JSON.stringify(data); 
    e.innerHTML = JSON.parse(jd); //Creates a JSON to place in the element, the format of data was not a valid JSON
    $('body').prepend(e); //Adds the element to the start of top of the webpage
    return [200, data, {}];
});

В тесте после вызова вы можете просто захватить элемент данными и получить текст для проверки:

data = element(by.css('.class-name'));
data.getText().then(function(text){
    expect(text).toMatch(expected, 'Did not match');
});

Он не идеален, он немного работает, но после длительного поиска он предоставил данные, которые я искал. Я надеюсь, это поможет вам.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню