Сбой: время ожидания сценария: результат не был получен в течение 11 секунд - PullRequest
0 голосов
/ 19 марта 2019

Я пытаюсь написать какой-нибудь e2e-тест для моего Angular приложения с использованием Транспортир .

У меня есть простая HTML-кнопка с id=my-btn, которую я хочу нажать, используя:

$('#my-btn').click();

К сожалению, я получаю следующие ошибки:

Сбой: время ожидания сценария: результат не был получен за 11 секунд

От: Задача: Protractor.waitForAngular () - Локатор: По (селектор css, # my-btn)

(Session info: chrome=73.0.3683.75)
(Driver info: chromedriver=2.46.628411 (3324f4c8be9ff2f70a05a30ebc72ffb013e1a71e),platform=Mac OS X 10.14.3 x86_64)

Если до щелчка я установил:

browser.waitForAngularEnabled(false);

тогда я не получаю никаких ошибок. Проблема в том, что это означает:

 * If set to false, Protractor will not wait for Angular $http and $timeout
 * tasks to complete before interacting with the browser. This can cause
 * flaky tests, but should be used if, for instance, your app continuously
 * polls an API with $timeout.

Итак, я бы хотел, чтобы время ожидания операции waitForAngular истекло.

Есть ли способ проверить, что http или timeout все еще висит?

Я хочу отладить свое приложение, чтобы понять, что происходит.

1 Ответ

4 голосов
/ 19 марта 2019

У меня были некоторые проблемы с этим.Есть несколько вещей, которые вы можете попробовать.

  1. Вручную проверьте, есть ли у вас какие-либо операции по времени.Например, мое приложение имело timer, который проверяет состояние каждые 5 минут.Но эта timer операция в стеке постоянно означала, что Angular никогда не стабилизировался.

Если вы найдете такую ​​операцию, вы можете использовать ngZone.runOutsideAngular(), чтобы она не дестабилизировала ваши тесты.

constructor(
    private ngZone: NgZone
  ) {}

ngOnInit() {
  this.ngZone.runOutsideAngular(() => {
    this.appStatusInterval = interval(this.appStatusUpdateIntervalTime)
       // rest of your code here
    });
  });
}
Откройте инструменты разработчика и запустите getAllAngularTestabilities().Постарайся узнать, какую информацию ты можешь получить оттуда.Вы можете попытаться получить дополнительные данные из исходного кода .Этот бит, в частности, может быть полезен для вас:
isStable(): boolean {
    return this._isZoneStable && this._pendingCount === 0 && !this._ngZone.hasPendingMacrotasks;
}

По крайней мере, вы можете получить больше представления о том, что дестабилизирует Angular, проверив каждое из этих трех условий по очереди.

...