Насмешливый бэкэнд с транспортиром
Я нашел много похожих обсуждений по этой теме, но, к сожалению, ни один из них не подходит под мой сценарий. Я пытаюсь смоделировать внутренний ответ от Protractor для тестирования новой функциональности, которой в настоящий момент нет в реальном API. Я пробовал разные способы добиться этого, но безуспешно. Каждый раз, когда я запускаю тест транспортира, http-запрос выполняется к реальному API, а не перехватывает запрос.
Вот мой сценарий: у меня есть приложение AngularJS, и в одном представлении есть поле ввода поиска:
<input type="text" class="form-control rounded input-lg" placeholder="Search Contacts" ng-model="contactCtrl.filter" ng-change="contactCtrl.inspectFilter()" focus="true" id="inputSearch">
Тогда у меня есть контроллер для этого:
function inspectFilter() {
$q.all([
comService.indexContacts($rootScope.$user.cloudContacts, vm.filter)
.then(function(response) {
vm.contacts = angular.copy(contacts);
})
.catch(function() {
})
]).then(function() {
});
}
}
И comService.indexContacts
который выполняет запрос http:
function indexContacts(url, filter) {
var filtered_url = filter ? url + '?displayName=' + encodeURIComponent(filter) : url;
initializeRequest();
req = {
headers : {
'Authorization' : getAuthenticationToken()
},
method : 'GET',
url : filtered_url
};
return $http(req);
}
Я не собираюсь объяснять логику всего, но давайте просто скажем, что когда пользователь вводит что-то в поле ввода, indexContacts
Функция вызывает запрос GET к API, и пользователь может видеть список контактов, отображаемых на экране.
Теперь я бы очень хотел перехватить этот $http(req) в моем тесте Protractor и вернуть ложный JSON обратно, но я не понимаю как.
'use strict';
describe('Making a call from the contact detail screen', function() {
beforeAll(function() {
contacts.goToContacts();
element(by.id('inputSearch')).clear().sendKeys('gai');
});
describe('UAT1 - Clicking the number to make a call', function() {
it('Given that the user is on the Cloud contact/user detail screen', function() {
element(by.repeater('contact in contactCtrl.results').row(0)).element(by.css('.tdName')).click();
dom.waitForElementDisplayed(element(by.css('.contact-modal')));
});
...
...
Хорошо, то, что я делаю здесь, это вводит некоторый текст в поле поиска с помощью: element(by.id('inputSearch')).clear().sendKeys('gai');
и это работает, но я хочу перехватить http-запрос, запущенный предыдущим comService, и вместо этого вернуть ложное JSON обратно в приложение, чтобы отобразить пользовательский список пользователей вместо использования реального API для этого.
Как мне это сделать????