Как сообщить транспортиру игнорировать определенные асинхронные задачи Angular?

Мое приложение angularJS использует обработку событий, и оно сохраняет открытым запрос HTTP-событий и события сервера прослушивания. Итак, моя проблема заключается в том, что когда транспортир начинает тестирование моего приложения angularJS, он продолжает ждать завершения запроса потока событий, поскольку я использую ignoreSynchronization=false, поэтому транспортир ждет, пока он не получит тайм-аут, поскольку http-запрос потока событий никогда не завершится. Поэтому я хотел бы научить свой транспортир игнорировать такие задачи $http в потоке событий и продолжить тестирование моего приложения. Этот поток событий реализован во всем моем приложении, поэтому каждый раз, когда есть запрос на поток событий, транспортир получает тайм-аут.

Следующая ошибка, которую я получаю, когда истекает время ожидания: Ошибка: истекло время ожидания завершения асинхронных задач Angular через 300 секунд. Это может быть связано с тем, что текущая страница не является приложением Angular. Дополнительные сведения см. в разделе часто задаваемых вопросов: https://github.com/angular/protractor/blob/master/docs/timeouts.md#waiting-for-angular. Ожидались следующие задачи: - $http: https://example.com/custom/xxx/sse< /а>

Может ли кто-нибудь помочь мне избавиться от этой проблемы?


person Murali.Molluru    schedule 05.06.2017    source источник


Ответы (2)


В транспортир можно добавить макеты. Так что на самом деле вы можете добавить несколько фиктивных модулей, чтобы имитировать все, что вам нужно.

Если проблема связана только с тайм-аутом времени асинхронных запросов, вы также можете изменить это значение тайм-аута с protractor.config.js, увеличив его.

Кстати, возвращаясь к мокам, вы определяете моки и добавляете их в транспортир через метод browser.addMockModule.

Вот хорошая статья о моках в транспортире:

http://eitanp461.blogspot.ie/2014/01/advanced-protractor-features.html

И вот хороший модуль npm, чтобы облегчить вам издевательство над запросами angularjs $http:

https://github.com/atecarlos/protractor-http-mock

Это может быть небольшой пример фиктивного модуля напрямую без использования модуля node выше:

browser.addMockModule('httpMocker', function() {
  angular.module('httpMocker', ['ngMockE2E'])
  .run(function($httpBackend) {
    $httpBackend.whenGET('MYURL')
    .respond("MOCKED RESPONSE!");
  })
})

Вы также можете определить макеты непосредственно внутри тестов, но если вы хотите, чтобы это было глобально в ваших тестах, я предлагаю вам напрямую определить ваши макеты внутри метода onPrepare внутри файла protractor.config.js.

Я надеюсь, что это помогает

person quirimmo    schedule 05.06.2017

Спасибо @quirimmo за ваш ценный ответ.

Мы можем решить проблему тайм-аута без использования имитируемых вызовов бэкэнда, просто изменив http-запрос и установив тайм-аут на http-запрос, чтобы транспортир ждал, пока запрос не получит тайм-аут, который мы уже установили (тайм-аут закроет длительные HTTP-запросы) и выполнит дальнейшие операторы.

person Murali.Molluru    schedule 10.07.2017