使用量角器模拟后端

时间:2016-02-11 13:04:44

标签: angularjs testing protractor e2e-testing ngmocke2e

我发现了很多关于这个主题的类似讨论,但不幸的是,它们都不符合我的情况。 我正在尝试模拟Protractor的后端响应,以测试目前在真实API中不存在的新功能。 我尝试了不同的方法,但没有运气。每次运行量角器测试时,都会对真实API执行http请求,而不是拦截请求。

这是我的情景: 我有一个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() {
      });
    }
  }

执行http请求的comService.indexContacts

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函数会触发对API的GET请求,并且用户可以看到列表在屏幕上呈现的联系人。

现在我想在我的Protractor测试中拦截$ http(req)并返回一个模拟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');这样可行,但是,我想截取前一个comService触发的http请求,而是返回一个模拟JSON返回应用程序以呈现自定义用户列表,而不是使用真实API。

我该怎么做????

0 个答案:

没有答案