Angular 2 setTimeout e2e测试失败

时间:2017-07-03 17:49:30

标签: angular protractor

我有一个组件,用于计算" afterViewChecked" lifeCycle,所以我需要使用setTimeout - 要应用更改,否则我会收到错误。 (Angular 4 Changes based on view

我刚发现setTimeout,无论我的应用程序在哪里导致量角器抛出超时消息。 - 说

  

失败:等待异步角度任务完成等待.......这可能是因为当前页面不是角度应用程序",

我该怎么办? - 有时你只需要使用setTimeout ...

2 个答案:

答案 0 :(得分:0)

检测DOM更改的另一种方法是通过MutationObserver。在构造函数中实例化该类,您可以在其中定义对更改执行的操作,然后在ngAfterViewInit()中进行观察。当您运行所需的计算功能时,您可以停止观察,以便在发生进一步更改时该功能不会继续触发。

import { Component, AfterViewInit } from '@angular/core';

@Component({
  selector: 'app-test',
  template: `<div #element></div>`
})
export class TestComponent implements AfterViewInit {
  @ContentChild('element') element : ElementRef;
  this.observer: MutationObserver;

  constructor() {
    this.observer = new MutationObserver(mutations => {
      this.testFunction();
    });
  }

  ngAfterViewInit() {
    this.observer.observe(this.element.nativeElement, { attributes: true, childList: true, characterData: true });
  }

  testFunction() {
    this.observer.disconnect(); // We no longer want to observe
    alert('Test!');
  }

}

答案 1 :(得分:0)

你需要用$ interval替换$ timeout,它会起作用。 “如果您的页面使用$ timeout进行轮询,Protractor将无法判断您的页面何时准备就绪。请考虑使用$ interval而不是$ timeout。”

他们的官方文件:http://www.protractortest.org/#/system-setup https://github.com/marcorinck/angular-growl/issues/43