2012-12-01 11 views
5

Muszę napisać testy jednostkowe dla aplikacji AngularJS, która intensywnie korzysta z Google Maps API v3 (obliczanie odległości, tworzenie znaczników na mapie itp.) I wiem, że powinienem jakoś stworzyć lub wyobrażamy płótno mapy, żebym mógł korzystać z funkcji testów jednostkowych, które używają Google Maps API i tworzyć znaczniki na tym płótnie, ale nie jestem pewien jak to zrobić i nie byłem w stanie znaleźć dobrego tutoriala/zasobu na temat testu jednostkowego (najlepiej z AngularJS/Jasmine) aplikacje oparte na Google Maps API.AngularJS: aplikacja do testowania urządzenia oparta na Google Maps API

Każdy przykład pracy - nawet najprostszy - takich testów jednostkowych, byłby bardzo doceniony.

+3

Czy stworzyłeś usługę wstrzykiwania Google Maps API? Jeśli tak, to test jednostkowy będzie łatwy ... jeśli nie, test jednostkowy będzie znacznie trudniejszy. –

+0

@ help - dziękuję ... ale obawiam się, że nie podążam. – keepsea

+1

Test jednostki nie powinien sprawdzać, czy Google jest żywy lub zachowuje się w odpowiedni sposób. Więc w zasadzie nie masz zamiaru testować Google. Testujesz, czy kontroler, usługa itp. Wysyła odpowiednie połączenia do potrzebnych usług Google. Aby to zrobić, w swoim teście nie korzystasz z google, ale z jakiegoś "fałszywego" Google'a, który tworzysz (tzw. Usługa, która twierdzi, że jest usługą map Google, ale w rzeczywistości jest dość głupia i zwraca tylko wyniki określone przez Ciebie. Dostajesz tam, gdzie to idzie? –

Odpowiedz

7

Z powyższych komentarzy wynika, że ​​może potrzebujesz następujących informacji (jeśli nie chcesz tego lekceważyć): Jest to WIELE wyjaśnień, które musiałbym Ci podać, to będzie powieść, jeśli wpiszesz to wszystko. W związku z tym, zamierzam po prostu połączyć wiele artykułów, które wykonają o wiele lepszą pracę, niż mogę wytłumaczyć ci każdy kawałek.

Angular to wszystko o dependency injection. Wstrzykiwanie zależności to vital, jeśli przeprowadzasz jakiekolwiek testy jednostkowe. Dla kompletności założę się, że nie wiesz, co to jest zastrzyk zależności i udzielę szybkiego wyjaśnienia (wybacz mi, jeśli już to wiesz): iniekcja zależna projektuje twój kod tak, że wszelkie zewnętrzne zależności mogą być "wstrzyknięte" przez argument. Zależność byłaby dowolnym kodem zewnętrznym do bloku kodu, w którym się znajduje. Dlatego w Angular trzeba włączyć kontroler $ scope w swoich kontrolerach, lub może http lub zasób $ ... ponieważ są one wstrzyknięte do kontrolera . W testowaniu jednostkowym pozwala to na makiety tych obiektów i ich przekazywanie, dzięki czemu można zobaczyć wyniki testów w kontrolowany sposób.

Jeśli masz zamiar użyć kodu zewnętrznego (Google Maps API, Facebook API, etc) w kontrolerze, chcesz inject tego kodu przez owinięcie go w service i injecting it into your controller.

Możesz również chcieć create a directive dla rzeczywistego fragmentu mapy jako manipulacji DOM (takie jak to, co zrobiła nowa mapa() w Google Maps API) powinno być zrobione w dyrektywie. Potem po prostu przetestujesz dyrektywę. Aby uzyskać wskazówki na temat dyrektyw dotyczących testowania, radzę przejrzeć numer Angular's directive tests in their Github repository as examples. Zasadniczo $ skompilujesz dyrektywy i przetestujesz efekty manipulowania nim.

Powiązane problemy