Обновление макетов объектов в тестах транспортира
Просто интересно, есть ли у кого-нибудь хорошее решение для обновления ложных звонков в тесте транспортира. Мне нужно иметь возможность смоделировать вызов (что я могу сделать с помощью ngMockE2E), но в следующий раз, когда вызов будет выполнен, я хочу, чтобы он вернулся с другими результатами.
httpbackend.when('GET', ....URL....).respond(200, results);
где results
это объект json, который возвращается.
При первом вызове он возвращается с правильным json. Но в том же тесте я хочу обновить эти результаты, чтобы при следующем вызове он возвращал обновленный json.
Мысли?
1 ответ
При использовании модуля http-backend-proxy с помощью объекта контекста можно изменить ответ на запрос с тем же URL-адресом. Для этого вам нужно передать функцию .respond()
метод, который должен возвращать массив с данными о состоянии и ответе. Внутри этой функции у вас есть доступ к так называемому объекту контекста, который используется для передачи данных из теста Protractor в приложение Angular на странице. Можно изменить этот объект контекста из теста, чтобы приложение Angular могло получить другой ответ.
var HttpBackend = require('http-backend-proxy');
var proxy = new HttpBackend(browser);
// ...
// use one data for first response
proxy.context = {
notes: notifications,
messages: allMessages
};
proxy.when('GET', '...notificationsURL...').respond(function () {
return [200, $httpBackend.context];
});
// here make a first call
// use another data for second response
proxy.context = {
notes: notifications2,
messages: allMessages2
};
proxy.syncContext(); // required, update context content for Angular app
// here make a second call
Примечание: функция, которую вы передаете .respond()
будет сериализован (преобразован в строку) и вставлен на страницу, по умолчанию для доступа к объекту контекста из Angular-переменной $httpBackend
используется. Взгляните на этот раздел документации, чтобы переименовать его - Настройка объекта контекста.