Насмешливый бэкэнд с транспортиром

Я нашел много похожих обсуждений по этой теме, но, к сожалению, ни один из них не подходит под мой сценарий. Я пытаюсь смоделировать внутренний ответ от 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 для этого.

Как мне это сделать????

0 ответов

Другие вопросы по тегам