2016-10-27 96 views
7

如何從angular2運行時檢測到我在e2e測試模式下運行?我有一個會話刷新間隔,我不想在測試模式下設置,以避免量角器出現同步問題。如何檢測angular2 web應用程序處於測試模式

一個明顯的答案是尋找一個URL參數。有沒有一個骯髒的解決方案?

編輯(賞金之前的說明): 量角器連接到角(1或2),以便在評估任何事情之前等待所有未完成的工作完成。這意味着所有優秀的角度promises或任何活動的角度timer將掛起量角器測試(並最終導致它們失敗)。最常見的解決方案是設置browser.ignoreSynchronization = true,但這會迫使我在回調鏈中嵌套所有e2e測試或使用一堆睡眠。可能都是。因此,看起來我被困在一塊岩石和一個艱難的地方,要麼有寫真e2e測試的實際經驗,要麼圍繞特定的應用代碼行設置條件,以便在「測試模式」(eww,醜陋)時不運行。我選擇了更容易的e2e測試,因爲我期望以數百種方式編寫它們,到目前爲止,我們只談到一個在測試期間不重要的間隔(會話刷新間隔爲30分鐘)。

+1

從全局變量(例如ENV)獲取環境非常普遍。 – estus

+0

我對Angular2使用'browser.ignoreSynchronization = true',不必等待模型在更改後解決。當'browser.ignoreSynchronization = true'是一個問題並且迫使你入睡時,你能描述一個樣本嗎? –

+0

@JuanmiRodriguez每次有異步的事情都完成了。如更改「頁面」或通過網絡獲取數據。 – Hampus

回答

0

一個顯而易見的解決方案,我認爲是設置窗口對象

if(window.TEST_MODE){ 
    // run code that needs to be run during test 
} 

上一個全局變量在你的測試代碼中設置

window.TEST_MODE = true; 
+1

雖然這會起作用,但它基本上只是一個比@estus提出的使用環境變量更骯髒的解決方案,這將是我將努力解決的問題。 在使用e2e測試配置時,有一個配置變量,比如'useSessionRefresh = true'並且它是'false'就行了。此外,這不會使生產代碼混亂很多window.TEST_MODE,並且可能本身就是一個有價值的配置。 – Hampus

+0

我同意,我的解決方案只是一個暫時的,如果你很着急 – Raaghu