我有一个angular2 app我想用量角器测试。
在这个应用程序中,我有一个页面,其中包含一个图表,该图表定期使用自动生成的数据进行更新。
显然,量角器的一个功能是在执行测试代码之前等待脚本和http调用完成。但是,如果有一个永远不会完成的轮询脚本,量角器会在一段时间后永远等待并超时。
在angular1中,这可以通过使用$interval
实现轮询来解决,量角器不会等待。不幸的是,在angular2中没有$interval
,并且实现轮询的正确方法似乎是Observable.interval
,所以这就是我的代码:
Observable.interval(500)
.map(x => this.getRandomData())
.subscribe(data => this.updateGraph(data));
在测试运行此代码的页面时,量角器将超时。它等待页面完成加载并认为这个脚本会在某个时候退出(实际上它会永远运行)。
在角度2中是否存在量角器识别的间隔机制,以便它在运行UI测试之前不等待轮询完成?
如果没有,我怎么能告诉量角器在执行更多测试代码之前不要等待这段时间?
编辑:为了澄清,有角度1的量角器中已存在超时问题,但可以使用$interval
修复,请参阅:
这在angular2中不起作用,因为没有$interval
。
答案 0 :(得分:4)
经过一番调查,我找到了两种可能的解决方案:
browser.ignoreSynchronization = true
指示量角器停止等待http调用和间隔脚本。但是,这可能会使编写e2e测试变得更加困难,因为现在您必须在测试之前手动等待元素和页面加载。ignoreSynchronization
完全相同,但仅适用于区间脚本。量角器仍将等待$http
次呼叫完成。两者都不是一个完美的解决方案,但总比没有好。
答案 1 :(得分:1)
https://github.com/angular/protractor/issues/3349#issuecomment-232253059
在juliemr的帮助下解决了这个问题:
this.ngZone.runOutsideAngular(() => {
this.timer = Observable.interval(1000)
}
超出区域运行超时,然后量角器将不会等待它。