簡體   English   中英

如何在angular2中實現間隔/輪詢以使用量角器?

[英]How to implement intervals/polling in angular2 to work with protractor?

我有一個angular2應用程序,我想用量角器測試。

在這個應用程序中,我有一個頁面,其中包含一個圖表,該圖表定期使用自動生成的數據進行更新。

顯然,量角器的一個特性是在執行測試代碼之前等待腳本和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

經過一番調查,我發現了兩種可能的解決方案

  1. browser.ignoreSynchronization = true指示量角器停止等待http調用和間隔腳本。 但是,這可能會使編寫e2e測試變得更加困難,因為現在您必須在測試之前手動等待元素和頁面加載。
  2. protractor-xhr-only插件基本上與ignoreSynchronization ,但僅適用於區間腳本。 量角器仍將等待$http調用完成。

兩者都不是一個完美的解決方案,但總比沒有好。

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

在juliemr的幫助下解決了這個問題:

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

運行超出區域,然后量角器將不會等待它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM