w Praktyce
7 godz. 1 min · Angular · Full-stack i Programowanie
Mateusz KuleszaSenior Software Developer, Konsultant, TrenerPodstawą produktywnej pracy z angularem jest możliwość zagwarantowania że wszystko działa bez potrzeby wielokrotnego “przeklikiwania” poszczególnych ekranów. W pierwszej części kursu omawiam więc temat testów automatycznych.Już po obejrzeniu pierwszych lekcji zobaczysz dlaczego warto testować kod i jak dzięki narzędziom dostarczonym z angularem jest to proste. Zobaczysz jak testowanie automatyczne pozwoli zaoszczędzić Ci wiele godzin spędzonych na szukaniu błędów.
Za jakość aplikacji odpowiada nie tylko to czy działa ona poprawnie, ale w dużej mierze decyduje o tym dobry interfejs użytkownika oraz UX, czyli user experience. Dwie kolejne sekcje kursu poświęcone są właśnie dobremu UI oraz UX. Omawiam typowe problemy w oparciu o zasady i wskazówki specyfikacji Google Material Design - jednej z najbardziej szczegółowych specyfikacji UX. Wszystkie przykłady UI zarówno w wariantach desktopowych jak i mobilnych omówione są na przykładzie Angulara oraz obszernej biblioteki komponentów Angular Material. Zobaczysz nie tylko jak korzystając z gotowych komponentów błyskawicznie budować nowe funkcjonalności, ale przy okazji omówimy wiele praktycznych wskazówek oraz dobrych praktyk UX które warto wykorzystać w Twoich aplikacjach.
W ramach budowania interfejsów skupimy się na najmniejszych szczegółach takich jak prawidłowe zachowanie linków, przycisków oraz wskaźników przechodząc stopniowo do coraz większych elementów aplikacji takich jak nawigacja, układ strony, paski nawigacyjne czy okna dialogowe. Przy każdym etapie czeka Cię masa wskazówek, przykładów i rozwiązań typowych problemów user experience.
Jednak UX to nie tylko wygląd i zachowanie pojedynczych elementów. W ostatnich sekcjach kursu dowiesz się jak projektować bardziej złożone interakcje z użytkownikiem. Zobaczysz wieloetapowe formularze kreatora oraz dowiesz się jak zarządzać stanem aplikacji oraz różnymi źródłami danych. Pokaże Ci jak zbudować samodzielnie sortowane, filtrowane i stronicowane źródła danych oraz połączyć je z różnymi komponentami UI takimi jak listy czy datagrid.
Na koniec kursu zobaczysz jak możemy różne gotowe elementy UI połączyć w przepływ ekranów budując ścieżkę użytkownika. Zobaczysz jak prawidłowo zaprojektowane komponenty wraz z dobrze zaplanowanym UX pozwalają być niesamowicie produktywnym jednocześnie nie poświęcając jakości czy dobrej architektury aplikacji.
Jest to kurs dla osób które już pracowały z angularem i chciałyby wyjść poza pojedyncze techniki oraz poznać proces projektowania aplikacji w praktyce z uwzględnieniem najlepszych praktyk programistycznych oraz user experience. Zarówno w wariancie webowym jak i projektując pod urządzenia mobilne.
Angular 6, 7, 8+
W tej lekcji pokażę ci jak uruchomić testy jednostkowe jak
ustawić konfigurację oraz pokażę ci w jaki sposób te testy
faktycznie są uruchamiane jaki mechanizm jest wykorzystywany pokaże
tobie także jak czytać te komunikaty właśnie z tego test
runnera czyli informacje o tym co się udało co co działa co nie działa w naszej
aplikacji oraz także jak skonfigurować i uruchomić przejrzeć raporty
typu code coverage czyli jak zobaczyć które części aplikacji faktycznie
są przetestowane a gdzie mamy jeszcze braki które części jakby naszej
aplikacji wymagają dokładniejszego przetestowania jak
pamiętasz przy generowaniu projektu użyliśmy tutaj opcji właśnie żeby angular od
razu dodał testy czy to już przy app jak widzisz już znajduje się jakiś
tutaj plik spec kropka ts i jest wygenerowany przykładowe test dla
komponentu i mamy tutaj przykładowy test
także dla modułu nie dla modułu tutaj nie wygenerowało się test czyli mamy jeden test tutaj wygenerowany
jeden plik testów i aby uruchomić testy uruchamiamy polecenie ng
test sobie dopisze jeszcze help żeby pokazać tobie jakie opcje są dostępne
czyli przy uruchamianiu testu możemy ustalić jakie
przeglądarki chcemy uruchomić czy chcemy raport
z pokrycia kodu możemy wybrać inny plik konfiguracyjny niż tutaj domyślny
plik karma conf o tym sobie za chwilkę powiemy możemy wybrać
różne środowiska czyli możemy skompilować tutaj aplikację dołączając jeden
z wybranych plików w tych plikach możemy przekazać różne konfiguracje czyli na przykład
chcemy co innego przekazać na przykład jako zmienne tutaj gdy
testujemy aplikacje co innego chcemy przekazać z aplikacji już publikujemy produkcyjnie
na przykład ustawienia jakieś na przykład adresy powiedzmy
serwera tak serwera tak serwer produkcyjny będzie na innym adresie niż serwer na przykład testowy
tutaj czy mamy także source mapy generować czyli mamy
informacje dla przeglądarki o tym jak przestawić
tutaj konfiguracja możemy dać który plik chcemy
uruchomić tutaj jeśli korzystamy z maszyny
wirtualnej i tutaj nie wykrywa tobie zmiany w plikach możesz przełączyć
na opcję poll która będzie po prostu zamiast czekać na komunikat o zmianie
plików co ileś milisekund będzie to sprawdzało możemy
przełączyć plik polyfill na inne rzeczy jak wspomniałam w poprzedniej lekcji mamy
plik polyfills dla starszych przeglądarek możemy specjalnie dla testów jakby
zmienić ten plik na inny żeby tylko w przypadku testów testować przy użyciu innych polyfilli
tutaj jeśli mamy symlinki dowiązania
symboliczne zamiast prawdziwych plików tutaj czy to ma działać flaga
produkcyjna czy chcemy testować w wersji deweloperskiej czy chcemy przetestować naszą aplikację jak ona się
zachowa właśnie w wariancie produkcyjnym mam
też informację czy mam wyświetlać progres które pliki konfiguracyjne i
coś co nas będzie interesowało to jest opcja watch czyli czy chcę obserwować
zmiany w plikach i uruchomić jeszcze raz te testy kiedy te
zmiany się wprowadzą w większości przypadków te opcje nie musimy ich zmieniać wystarczy
po prostu uruchomić ng test i taka opcja po prostu uruchomi
z ustawieniami które mamy tutaj w pliku karma conf js tu
niech się uruchamia proces a ja w tym czasie powiem to co się dzieje
w tym pliku karma conf js po pierwsze karma zobacz co tutaj karma runner github io
to jest takie narzędzie które pozwala uruchomić
różne mechanizmy testów możemy takie testy sobie przypiąć w dowolny
framework jakby testowy możemy to przypiąć do karma runnera a z drugiej strony możemy
przypiąć do karma runnera dowolne środowisko dowolną przeglądarkę lub urządzenie
jak przyjrzysz się tutaj temu plikowi tutaj eksport z tej funkcji mam
coś takiego jak config set pokazujemy w którym miejscu jest nasza ścieżka bazowa
czyli od którego katalogu chcemy rozpocząć i zwróć uwagę mam
tutaj frameworks czyli mam dodany jako pierwszy jasmine i teraz tak tutaj
może otworzę sobie otworzyła nam się przeglądarka okno przeglądarki o tym za chwilkę tutaj
polecam sobie tobie spojrzeć na adres karma runner github i
zobaczmy sobie także jasmine
jasmine mam nadzieje że wyszuka no właśnie jasmine
javaskryptowy tutaj jasmine to jest biblioteka do testów i biblioteka jasmine
zapewnia tutaj asercję czyli zapewnia mechanizmy do
faktycznie pisania kodu testów do określania czy coś działa
lub nie działa karma natomiast przyjmuje takie specyfikacje
i uruchamia je w przeglądarce tutaj jak uruchomiłem te testy
to jak widzisz tutaj pokazało mi się że uruchamia chroma z
nielimitowaną tutaj konkurencją co to znaczy że możemy ustawić
ile przeglądarek na raz ma być uruchomione w testach jeżeli już mam wolny komputer to
ustawiamy sobie tutaj ilość tych przeglądarek na mniejszą
na przykład na dwie na raz albo jedna na raz w kilku przeglądarkach jednocześnie
testować muszę zobaczyć czy aplikacja działa tak samo prawidłowo w chromie
w explorerze firefoksie na urządzeniu mobilnym możemy dodać
dodatkowe przeglądarki i jak to się odbywa po pierwsze tu z jednej strony przypinamy framework jasmine
czyli wybieramy jaki mechanizm będzie faktycznie uruchamiał nasze testy jak
w jakim formacie będziemy te testy zapisywać dodatkowo możemy dodać tutaj dodatkowe pluginy
tutaj musi być tutaj taki zestaw angular dev kit build angular
czy to jest zestaw pluginów który pozwala faktycznie testować angulara
na przykład tutaj dzięki tej wtyczce nie musimy się martwić o to
żeby angular zdążył skompilować szablony nim robimy testy nie
musimy się martwić o type scripts tą całą konfigurację która tutaj trzeba by
ją samemu stworzyć przygotować żeby te testy uruchomić to wszystko jest elegancko
zawarte w jednej wtyczce w jednym pluginie która dopiero uruchamia testy gdy angular już jest
zbudowany skompilowany gotowy do uruchomienia dodatkowo
mam tutaj pluginy czyli karma tak naprawdę jest tylko frameworkiem i
ona sama nic nie robi bo ona musi być dodane pluginy zarówno do obsługi przeglądarek
jaki i mechanizmów testów czyli mamy na przykład karma jasmine zamiast
jasmine mogliśmy użyć innych mechanizmów do testowania ja ich nie będę umawiał ale
jeśli spotkałeś spotkałaś się wcześniej z takimi rzeczami jak powiedzmy
jasmine chai sinon czy
na przykład z nowszych mechanizmów na przykład jest
jeśli chcesz inny tutaj mechanizm testów to bardzo
fajnie do karma możesz znaleźć masę gotowych pluginów wyszukam
sobie tutaj pluginy tu
są właśnie z technologiami i ich używać ale też powinno właśnie
być opcja plugins i jest opcja przypięcia właśnie różnych
frameworków różnych pluginów na różnych urządzeniach ja tutaj nie będę wchodził w
szczegóły karmy skupimy się na tej konfiguracji jakby angularowej czyli zobacz
podpinam informację że będę testował korzystając z frameworka jasmine będę
chciał uruchamiać to na przeglądarce na przykład chrome gdybym chciał dodać jeszcze powiedzmy
firefoxa to nie ma problemu tutaj sobie robimy npm install
save-dev żeby to zapamiętało i
karma na przykład firefox launcher
czyli instalujemy coś takiego i jeśli dopisałbym tu coś takiego karma
firefox launcher których się zainstaluję i
tutaj do przeglądarek dopisałbym jeszcze firefox
to powinno nam to uruchomić nie tylko jedną przeglądarkę
ale dwie zobaczymy uruchomię jeszcze raz po każdej zmianie dokumentacji musisz pamiętać żeby jeszcze
raz uruchomić te testy czyli tutaj yes przerwę uruchomię
jeszcze raz musisz pamiętać że przy każdej zmianie konfiguracji tutaj musisz te testy
po prostu jeszcze raz uruchomić i tym razem podam jeszcze dwie przeglądarki
żeby te same testy korzystając z tego samego frameworka zostały uruchomione w dwóch przeglądarkach
jak widzisz mamy launching chrome launching firefox i
tutaj mi się otworzyło jedno okno z firefoxem drugie
okno z chrome i jak widzisz mamy mamy tutaj tu i tu mamy raport
że testy zostały wykonane 3 specyfikacje czyli
3 testy w ramach jednego pliku app component mamy 3 testy 3 się udały mamy
tutaj na zielono i tutaj także chrome
odpalił tutaj także na zielono czyli jak widzisz karma pozwala
wiele przeglądarek uruchomić można przeglądarki mobilne uruchomić możesz także
skonfigurować tutaj widzisz port i możesz podłączyć na przykład przeglądarki nie
znając nie znajdujących się na tym komputerze na przykład twój telefon komórkowy jeśli
połączysz się właśnie z tutaj adresem twojego komputera i tym portem no
to możesz ponieść dodatkowe przeglądarki jak nie znadujące się na tym komputerze to
jest jedna rzecz ja tego firefox'a usunę żebyśmy za dużo przeglądarek na raz tu nie
mieli uruchomionych i tu jak widzisz w raportach przy każdej zmianie mamy executed czyli
wykonał 3 testy na firefoxie i każdy z nich się
udał mamy też czas ile to zajęło i mamy tutaj widzisz chrome 3
testy każdy z nich się udał czyli teraz zapiszę zmiany w
tym pliku uruchomię ponownie testy żeby do jednej przeglądarki
i co to jeszcze mamy oprócz chrome
launcher firefox launcher mamy też jasmine html reporter
i teraz jasmine html reporter to jest plugin który dokładnie
wyświetla nam to co tutaj widzisz czyli wyświetla raport w postaci strony
html gdzie możemy nie tylko poczytać sobie dokładnie o co chodzi możemy kliknąć
uruchomić tylko jeden z testów jak widzisz wybierałem z testu mogę uruchomić tylko jeden
z nich mogę uruchomić wszystkie trzy i jeśli pojawi się gdzieś jakiś błąd
no to te błędy zobaczymy na przykład mamy coś takiego że app should create
app i na przykład nasza aplikacja powinna mieć tytuł angular project jeśli
wejdę do naszego kodu mamy tutaj testy ale powiedzmy że w komponencie zmienimy
angular project 2 wprowadzę taką zmianę i
jak tylko tu coś uruchamiamy jak widzisz od razu mam informację że zmieniłem coś
co sprawiło że aplikacja jest niezgodna ze specyfikacją specyfikacja
określa że tytuł aplikacji musi być angular projekt zmieniłem
tutaj tytuł i natychmiast po zmianie pliku mam informacje dokładnie
co przestało działać czyli nasz komponent nie wyświetla
już tego tytułu i mam tu jakieś ładne exception mamy stack trace ja
widzę dokładnie jaki jest błąd i widzę też dokładnie jak do niego doszło
po kolei całą ścieżkę czyli w ogóle wczoraj dwa się nie udały czy
mam tu zgłoszone dwa błędy czyli jak widzisz mamy nie tylko raport tutaj w konsoli
na czerwono mamy informację co się miało stać tutaj mamy wynik
czy to się udało czy jeśli by się udało byłoby to na zielono
i tak samo mam tutaj tutaj w przeglądarce czyli nie
tylko jak widzisz mechanizm testów jest skonfigurowany tylko przeglądarka skonfigurowana
ale także raporty czyli w jaki sposób informowania o tych błędach są
także konfigurowalne jeśli nie chciałbyś testów na przykład samemu przeglądać tutaj
w postaci takiego raportu ale chciałbyś na przykład wygenerować plik xml dla
serwera continuous integration na przykład junit to możesz także poszukać na przykład karma
junit reporter i takie coś będzie nam tworzyło plik
z właśnie raportem w postaci takiej która może być zaczytany
przez jakiś system na przykład continuous integration typu powiedzmy jenkins
o czym tylko musisz pamiętać to to że dodałeś tutaj
plugin to za mało żeby to uruchomić musisz go także uruchomić tu w odpowiednich opcjach
czyli nowa przeglądarka musi być tu dopisana do browsers nnowy reporter musi
być dopisany tutaj do reporters progress to jest to co widzimy tutaj w konsoli
kj czyli karma jasmine html to jest coś tutaj widzimy
tutaj właśnie w przeglądarce okej tutaj mamy jeszcze
dodatkowy reporter czyli tutaj cover instanbul mamy
też plugin tutaj widzisz jeszcze który pomaga pracować
z angularem który zabezpiecza żeby ten angular na pewno się załadował skompilował
uruchomił nim te testy uruchomimy no właśnie za to jest jeszcze ten
cover istanbul jest to reporter który mówi o pokryciu
naszego kodu testami ale o tym już w kolejnej
lekcji tak więc do zobaczenia