【问题标题】:How to implement intervals/polling in angular2 to work with protractor?如何在 angular2 中实现间隔/轮询以使用量角器?
【发布时间】:2016-07-21 09:11:13
【问题描述】:

我有一个 angular2 应用,我想用量角器进行测试。

在这个应用程序中,我有一个带有图表的页面,该图表使用自动生成的数据定期更新。

显然量角器的一项功能是在执行测试代码之前等待脚本和 http 调用完成。但是,如果有一个不断轮询的脚本永远不会完成,量角器将永远等待并在一定时间后超时。

在 angular1 中,这可以通过使用 $interval 实现轮询来解决,量角器不会等待。不幸的是,在 angular2 中没有 $interval 并且实现轮询的正确方法似乎是 Observable.interval,所以这就是我的代码的样子:

Observable.interval(500)
          .map(x => this.getRandomData())
          .subscribe(data => this.updateGraph(data));

在测试运行此代码的页面时,量角器会超时。它等待页面完成加载并认为该脚本将在某个时候退出(实际上它会永远运行)。

  • angular2 中是否存在量角器可识别的间隔机制,以便在运行 UI 测试之前不等待轮询完成?

  • 如果不是,我如何告诉量角器不要等待此间隔结束后再执行更多测试代码?

编辑:澄清一下,使用 angular1 的量角器中已经存在超时问题,但可以通过使用 $interval 来修复,请参阅:

这在 angular2 中不起作用,因为没有 $interval

【问题讨论】:

  • @close-voter:你不明白哪一部分?我很乐意进一步解释这个问题。
  • 我将您的文章复制/发布到量角器问题:github.com/angular/protractor/issues/3349。你现在有没有更好的解决方案?

标签: javascript selenium angular protractor rxjs


【解决方案1】:

https://github.com/angular/protractor/issues/3349#issuecomment-232253059

在 juliemr 的帮助下解决了这个问题:

this.ngZone.runOutsideAngular(() => {
  this.timer = Observable.interval(1000)
}

在区域外运行超时,那么量角器不会等待它。

【讨论】:

    【解决方案2】:

    经过一番调查,我发现了两种可能的解决方案:

    1. browser.ignoreSynchronization = true 指示量角器停止等待 http 调用和间隔脚本。但是,这可能会使编写 e2e 测试变得更加困难,因为现在您必须在测试之前手动等待元素和页面加载。
    2. protractor-xhr-only plugin 基本上与ignoreSynchronization 做同样的事情,但仅适用于间隔脚本。 Protractor 仍将等待$http 调用完成。

    两者都不是完美的解决方案,但总比没有好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多