2016-04-01 30 views
5

我有一個angular2應用程序,我想用量角器測試。如何實現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

+0

@ close-voter:你不瞭解哪部分?我會很樂意進一步解釋這個問題。 – magnattic

+0

我複製/張貼您的文章到量角器問題:https://github.com/angular/protractor/issues/3349。你現在有沒有更好的解決方案? – zixia

回答

2

經過一番研究,我發現了兩個可能的解決方案:

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

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