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

Javascript 如何在angular2中实现间隔/轮询以使用量角器?,javascript,selenium,angular,protractor,rxjs,Javascript,Selenium,Angular,Protractor,Rxjs,我有一个angular2应用程序,我想用量角器测试 在这个应用程序中,我有一个带有图形的页面,该页面正在使用自动生成的数据定期更新 显然,量角器的一个特性是在执行测试代码之前等待脚本和http调用完成。然而,若有一个永不结束的持续轮询脚本,则量角器将永远等待,并在一定时间后超时 在angular1中,这可以通过使用量角器不等待的$interval实现轮询来解决。不幸的是,在angular2中没有$interval,实现轮询的正确方法似乎是可观察的。interval,因此我的代码是这样的: Obs

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

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

显然,量角器的一个特性是在执行测试代码之前等待脚本和http调用完成。然而,若有一个永不结束的持续轮询脚本,则量角器将永远等待,并在一定时间后超时

在angular1中,这可以通过使用量角器不等待的
$interval
实现轮询来解决。不幸的是,在angular2中没有
$interval
,实现轮询的正确方法似乎是
可观察的。interval
,因此我的代码是这样的:

Observable.interval(500)
          .map(x => this.getRandomData())
          .subscribe(data => this.updateGraph(data));
当测试运行此代码的页面时,量角器将超时。它等待页面完成加载,并认为该脚本将在某个时候退出(实际上它将永远运行)

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

  • 如果不是,我如何告诉量角器在执行更多测试代码之前不要等待这个间隔完成

编辑:为了澄清,angular1量角器中已经存在超时问题,但可以通过使用
$interval
解决,请参阅:


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

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

  • browser.ignoreSynchronization=true
    指示量角器停止等待http调用和间隔脚本。然而,这可能会使编写e2e测试变得更加困难,因为现在您必须手动等待加载元素和页面,然后再测试它们
  • 基本上与ignoreSynchronization执行相同的操作,但仅适用于间隔脚本。量角器仍将等待
    $http
    调用完成
  • 两者都不是完美的解决方案,但总比没有好。

    在Julie先生的帮助下解决了此问题:

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

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

    @close投票人:您不明白哪部分?我将很乐意进一步解释这个问题。我将您的文章复制/发布到Digrator问题:。你现在有没有更好的解决办法?