Dzisiaj przy piwie, po meczu Portugalia-Hiszpania rozwinęła się dyskusja o JavaScripcie (wiem, nuda). Wychodzi na to że jest to najsłabszy punkt w wielu aplikacjach, szczególnie bardzo interaktywnych, ajaxowych. Pomimo zastosowania bibliotek w stylu jQuery mamy pewne problemy:
jak dobrze strukturyzować kod (podział na pliki, klasy itd)
jak definiować zależności pomiędzy kodem i plikami źródłowymi, jak ten kod dynamicznie ładować
jak testować kod javascript
jak stosować wzorzec MVC do kodu JavaScript
Różne biblioteki w różny sposób starają się podchodzić do problemu: Dojo ma bardzo fajny mechanizm rozwiązywania zależności i ładowania klas, jQuery super sprawdza się przy operacjach na drzewie DOM, extjs ma rozszerzenie do MVC itd. Nie rozwiązuje to jednak problemu przerośniętego pliku public/application.js oraz faktu że jedyne testy które przeprowadzamy to testy in-browser, przy pomocy Selenium!
Ktoś może polecić jakieś dobre książki o JavaScript? W ciągu 3 lat mojej przygody z RoR, środek ciężkości w stosowaniu JavaScript i Ruby przesunął się znacznie w kierunku tego pierwszego, a wydaje mi się że jeśli chodzi o dobre praktyki, testowanie kodu itd. nadal jesteśmy trochę do tyłu, przynajmniej porównując do kodu w języku Ruby.
W tym momencie jedynym sensownym rozwiązaniem dla jquery jest QUnit. Jeżeli ktoś lubi składnię a’la rspec, to można do tego jeszcze dorzucić nakładkę: http://github.com/mmonteleone/pavlov
Testy do javascriptu najłatwiej pisze się dla wyodrębnionych kawałków. Np. jeżeli robisz autocomplete i załatwisz to wrzucając gdzieś w środku 1000 innych linii kodu kilka bindów i funkcji, to masz prawie zerowe szanse na dobre testy. Jeżeli zamkniesz to w oddzielnym pliku i zrobisz jquery style: $(“element”).autocomplete(…), to będzie dużo łatwiej, bo możesz testować tylko ten kawałek kodu w oderwaniu od reszty projektu.
Żeby łatwo było testować kod na różnych przeglądarkach warto postawić u siebie testswarm. Jest to narzędzie, które pozwala w latwy sposób testować kod na wielu przeglądarkach. Wystarczy, że odpalisz daną przeglądarkę, wskażesz jej url swojego testswarma, a przeglądarka sama zaciągnie testy i zwróci wynik. Szczerze mówiąc nigdy jeszcze nie używałem testswarma na komercyjnych projektach, ale było to związane raczej ze stosunkowo małą ilością testów javascript i brakiem czasu na jego postawienie.
Jeśli chodzi o książki to polecam “Javascript: The Good Parts” Douglasa Crockforda. To chyba jedyna książka, która nie usiłuje zaimplementować Javy w Javascripcie.