我正在編寫一些JavaScript模塊,用於在瀏覽器(客戶端,而不是服務器端)中運行。該模塊使用Google Maps JavaScript API。如何在使用Google Maps for JS的代碼上編寫單元測試
我想通過單元測試來覆蓋我的代碼。我也希望我的測試是孤立的。我發現了severalvcr-like JSlibraries用於記錄和嘲諷Google Maps Api正在生成的HTTP請求。但他們都是Node.JS(因爲PhantomJS doesn't support using fs
module)。此外,Node.JS比PhantomJS擁有更豐富和可讀的回溯。
所以我想知道如何將Google Maps Javascript API包括到我的測試中,並使用基於Node.JS的測試運行器以及如何爲我的代碼編寫測試?
P.S.我不堅持某個JS單元測試庫。它可以是Jasmine,QUnit或其他。
P.P.S它不一定是Node.JS亞軍。如果還有其他選擇,那完全沒問題!
P.P.P.S.我的目標是爲了避免以下的事情:
- ,以避免在測試中
- 互聯網連接和相應的延遲依賴,避免了因改變在谷歌服務器的一些GEO數據的測試失敗。例如:如果我使用指示,我真的不在乎它是2000米還是2001米,我只是想知道,我從Google獲得了一些適當的數據並對它進行了一些計算。
P.P.P.P.S.感謝@MichaelGeary answer我們知道Google僅保存其API的3個版本。但我不是隻關注谷歌地圖,我選擇它在這個問題,因爲它的流行/我有同樣的問題適用於任何其他地圖api,如Yandex.Maps,,Bing等。他們大多數不刪除舊的API,所以我可以修復版本並依靠不更改內部API和HTTP請求。
另外我想避免模擬地獄,因爲我的代碼非常複雜,並且使用了大量不同類型的地理對象。因此,嘲笑所有這些並且支持該代碼並不容易。它看起來像無法忍受的事情。
我的想法是在一段時間內修復API的版本(在Google案例中不長的時間),並依賴於內部HTTP請求格式的持久性。並不時刪除所有記錄的數據,以確保在現實世界中一切仍然正常。
我想讓自己成爲一個能控制我什麼時候修復我的測試的人。我不想讓Google在隨機時間隨時打破我的測試。
你肯定*不想*做的一件事就是使用一個庫來記錄和重放JavaScript Maps API使用的HTTP請求。這些請求網址和回覆沒有記錄,對於Google Maps API代碼是私有的,並且可能隨時更改。您編寫的任何測試應僅基於記錄的API,否則當Google更改API內部時,您會發現測試失敗。 –
@MichaelGeary,我的目標是避免幾件事情:1)避免依賴互聯網連接和相應的延遲2)避免因爲更改Google服務器上的某些GEO數據而導致測試失敗。例如:如果我使用指示,我真的不在乎它是2000米還是2001米,我只是想知道,我從Google獲得了一些適當的數據並對它進行了一些計算。所以我不想在生產或測試中重放HTTP請求。我只是想模擬所有的HTTP請求來隔離我的測試。 – petRUShka
這聽起來更像我的功能測試。 Phantomjs本身並沒有API,但[Casper.js](http://casperjs.org/)會很好。 –