如何在angular2中实现间隔/轮询以使用量角器?

mag*_*tic 7 javascript selenium rxjs protractor angular

我有一个angular2应用程序,我想用量角器测试.

在这个应用程序中,我有一个页面,其中包含一个图表,该图表定期使用自动生成的数据进行更新.

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

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

Observable.interval(500)
          .map(x => this.getRandomData())
          .subscribe(data => this.updateGraph(data));
Run Code Online (Sandbox Code Playgroud)

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

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

  • 如果没有,我怎么能告诉量角器在执行更多测试代码之前不要等待这个间隔完成?

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

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

mag*_*tic 4

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

  1. browser.ignoreSynchronization = true指示 Protractor 停止等待 http 调用和间隔脚本。然而,这可能会使编写 e2e 测试变得更加困难,因为现在您必须在测试元素和页面之前手动等待它们加载。
  2. protractor -xhr-only 插件基本上与 执行相同的操作ignoreSynchronization,但仅适用于间隔脚本。Protractor 仍将等待$http调用完成。

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