我有一個角度的web應用程序,對於通過長查詢從後端通知持續監聽:量角器測試VS長輪詢
scope.notification = $resource('/notification').get();
這個請求從來沒有在測試環境中完成。對於量角器來說這是一個問題,因爲它希望等待所有未完成的HTTP請求完成。
我看到了很多潛在的解決方案,但都有一些問題。
我沒有看到告訴量角器忽略此請求的方法。從$interval
(它本身被忽略)發出它不是一個解決方案。量角器不會等待請求發送,但一旦發送,它仍然會等待它完成。
所以我試圖在運行測試時不發送這個請求。但是我怎麼知道我正在進行測試?
- 我可以添加一個標誌到URL(
?protractor=true
)。但是我的網絡應用程序一直在修改URL,所以它會很快清除。 - 我試着設置一個變量:
browser.executeScript('window.runningProtractorTests = true;');
但是看起來Protractor在運行executeScript
之前會先等待頁面同步。我在頁面加載時馬上發送請求。 - 我可以設置一個cookie。但它相當麻煩,例如我必須加載頁面兩次。 (有關更多困難,請參閱issue 341。)
- 我可以設置用戶代理。這也不容易。我需要爲配置文件中的每個瀏覽器設置瀏覽器標誌。我不想完全覆蓋用戶代理(例如,以
Protractor
爲例),因爲擔心我的庫可能依賴於解釋用戶代理字符串,所以我必須找出正確的字符串。 - 我可以檢查服務器是否在特定的端口上運行。但是從現在開始一年後,有人會嘗試在同一端口上運行生產服務器,但不明白通知無法正常工作的原因。
- 讓測試後端立即完成請求並沒有什麼幫助,因爲每當它完成後立即發送它。但我想我可以介紹一個特殊的「你正在測試」通知,並在收到此通知時停止輪詢。這意味着對協議的(小)改變,所以如果可能的話,我寧願避免它。
有沒有簡單的方法來做到這一點?
謝謝!這聽起來不錯,明天我會試一試。我不知道'addMockModule' ...它看起來非常強大。 –
確實有效! –