2016-06-07 98 views
8

由於我創建了一堆新的指令測試(在JHipster項目中),我正面臨着這個問題。業力單位測試由一個咕task任務執行。 我想明確強調,我的問題是不同的這兩個(和其他幾個人我不允許張貼),我在GitHub上找到:Karma單元測試在無限循環中反覆運行

https://github.com/karma-runner/karma/issues/1077

https://github.com/karma-runner/karma/issues/393

所不同的是那個業力永遠不會執行測試,而是繼續在循環中運行它們,就好像在配置的位置中有無數個測試一樣。可以在命令行輸出中清楚地看到:


Firefox 45.0.0 (Windows 7 0.0.0): Executed 321 of 192 (skipped 7) SUCCESS (0 secs/1 min 3.757 secs) 
Chrome 51.0.2704 (Windows 7 0.0.0): Executed 399 of 192 (skipped 11) SUCCESS (0 secs/1 min 2.239 secs) 
PhantomJS 2.1.1 (Windows 7 0.0.0): Executed 444 of 192 (skipped 11) SUCCESS (0 secs/1 min 0.515 secs) 

它會一直持續下去。執行經過近一個小時,這是結果:


Chrome 51.0.2704 (Windows 7 0.0.0): Executed 20171 of 192 (skipped 472) SUCCESS (0 secs/50 mins 7.281 secs) 
Firefox 45.0.0 (Windows 7 0.0.0): Executed 3186 of 192 (skipped 72) DISCONNECTED (14 mins 48.503 secs/12 mins 16.547 secs) 
PhantomJS 2.1.1 (Windows 7 0.0.0): Executed 27054 of 192 (skipped 611) DISCONNECTED (48 mins 25.253 secs/47 mins 34.776 secs) 

不要緊,測試是否通過或失敗,或者他們爲什麼會失敗(TypeError, ReferenceError...),測試永遠無論運行(所有測試在這裏,你可以看到)。只有當我停止命令行中的咕嚕聲時,執行纔會停止。

過去幾個月,噶瑪配置和咕嚕聲任務沒有改變。 Singlerun和autowatch設置(以及任何其他)是無關緊要的。

被測試的代碼似乎是不相關的。一些變化,他們讓問題消失了一段時間,但是當我寫新的測試時,它總是回來。當然,我一開始以爲我的代碼是責任,但下面的內容會說明爲什麼它不是一個合乎邏輯的結論。

奇怪的行爲總是在創建新測試時開始,但測試代碼本身似乎是不相關的,因爲新測試從不使用任何特殊操作或覆蓋其他測試沒有的組件。而且,即使新測試是一個完全空的函數體,它仍然會產生一種奇怪的行爲,這表明它不是程序中的新決策路徑,當測試覆蓋時它會導致問題。這就是爲什麼我不相信代碼是罪魁禍首。 我也設法通過關閉隨機測試(我們很久以前沒有任何問題使用)來停止無限執行,但是當我添加新測試時問題總是回來。

環境無關緊要。測試在我的Windows機器上和在Linux服務器上的CI上無限運行。

我也認爲這可能是一個內存限制問題,因爲一段時間,瀏覽器崩潰在某個測試上,與新功能或新測試無關(並且一直工作正常) 。當我關掉那個測試時,問題就停止了一段時間,但後來又回來了(因爲我一直在寫測試)。

我將所有NPM軟件包和Bower組件更新到最新版本,但這並未改變無限循環。

現在我完全沒有想法。有沒有人遇到過這種奇怪的行爲和控制檯輸出?

+0

今天同樣的事情發生在我們身上 - 我想知道是否有釋放業力/茉莉/ someOtherDependency可能導致這種情況? –

+0

一定是巧合,我們在同一時間有同樣的問題!請參閱我的答案,瞭解我們如何解決這個問題 –

回答

5

我們剛剛解決了這個確切的問題。問題是我們在我們的應用程序中有一個註銷功能,在將瀏覽器重定向到另一頁之前執行各種任務。我們在註銷功能中添加的一項測試並未嘲笑窗口。重定向調用,當它從業力測試運行中執行時,它會導致循環行爲。

嘲笑/偵聽此調用後,循環行爲停止。

不確定這是否與您遇到的問題相同,但希望這些信息能幫助您!

+0

謝謝,這完全有幫助。 有一堆代碼和平測試,使瀏覽器下載資源:'$ window.location =「...」'。偵察這些電話解決了這個問題。 唯一讓我不安的是我設法停止了幾次循環,但是當我寫新的測試時它又回來了。你認爲重定向會導致一些內存泄漏或類似的情況,導致每次測試都會導致內存消耗異常?如果是這種情況,我相信嘲笑重定向可以永久解決問題。否則恐怕循環會再次回來。 – user436357

+0

我認爲這種行爲是因爲重定向需要一些時間來處理,所以在重定向後執行的測試越多,重定向到進程的時間越多,然後循環開始。理論上,如果重定向發生在業務運行中執行的最後一個測試上,那麼你將看不到循環,因爲在重定向發生之前業務運行將終止。 –

+0

P.S.如果你喜歡我的回答,請接受它:) –