2012-12-01 59 views
5

我需要爲大量使用Google Maps API v3的AngularJS應用程序(計算距離,在地圖中創建標記等)編寫單元測試,並且我知道應該以某種方式創建或模擬地圖畫布,所以我可以單元測試使用Google Maps API並在該畫布上創建標記的函數,但我不知道如何做到這一點,並且我無法找到任何有關如何進行單元測試的良好教程/資源(最好使用AngularJS/Jasmine)基於Google Maps API的應用程序。AngularJS:基於Google Maps API的單元測試應用程序

任何工作示例 - 即使是最簡單的 - 這樣的單元測試將不勝感激。

+3

您是否創建了一項服務來注入Google Maps API?如果是這樣,那麼單元測試將很容易......如果不是,單元測試將會更加困難。 –

+0

@blesh - 謝謝你......但我恐怕我不會效仿。 – keepsea

+1

你的單元測試不應該測試谷歌是否還活着或行爲適當。所以基本上你不是要測試Google。您可以測試您的控制器,服務等是否將正確的呼叫發送至所需的Google服務。 爲此,在您的測試中,您不要使用谷歌,而是創建一些「假」谷歌(一種所謂的模擬)。聲稱是Google地圖服務的服務,但實際上很愚蠢,只返回由您定義的結果。你會得到這個地方嗎? –

回答

7

從上面的評論看來,也許你需要以下信息(如果你不喜歡的話):這是很多的解釋,如果我輸入的話,我必須給你一個這樣的解釋。一切都結束了。正因爲如此,我只是想給你們提供很多文章,這些文章比我能向你們解釋每件作品要好得多。

角度全部是關於dependency injection。如果您正在進行任何單元測試,則依賴注入是至關重要。爲了完整起見,我假設你不知道依賴注入是什麼,並提供一個快速解釋(如果你已經知道這一點,請原諒我):依賴注入正在設計你的代碼,以便任何外部依賴可以通過論據。依賴關係是代碼塊外部的任何代碼。這就是爲什麼在Angular中,你必須在你的控制器中包含$ scope,或者可能是$ http或$ resource ...因爲那些被注入到控制器中的 。在單元測試中,這允許您模擬這些對象並將它們傳入,以便以受控方式查看測試結果。

如果你想在你的控制器使用一些外部代碼(谷歌地圖API,Facebook的API,等等),要注入代碼通過在serviceinjecting it into your controller加以包裝。

此外,您可能想要將create a directive作爲DOM操作的實際地圖片段(例如Google Maps API中新Map()所做的操作)應在指令中完成。那麼你只需測試指令。有關測試指令的指導,我建議您期待Angular's directive tests in their Github repository as examples。基本上你編譯指令,並測試操縱它的結果。

相關問題