Testowanie jednostkowe AngularJS z Karma i Jasmine
โก Inteligentne podsumowanie
Testowanie jednostkowe AngularJS z uลผyciem Karma i Jasmine weryfikuje kontrolery, dyrektywy i usลugi w izolacji. Karma uruchamia specyfikacje w rzeczywistych przeglฤ darkach, Jasmine dostarcza skลadniฤ asercji, a Angular-mocks wstrzykuje zaleลผnoลci bez serwera rzeczywistego.

Jednฤ z najwspanialszych cech AngularJS jest Testy aspekt. Kiedy programiลci Google Tworzฤ c AngularJS, pamiฤtali o testowaniu i upewnili siฤ, ลผe caลa struktura AngularJS jest testowalna.
W AngularJS testowanie jest zazwyczaj przeprowadzane za pomocฤ frameworka Karma. Testowanie w AngularJS moลผna przeprowadziฤ bez Karmy, ale framework Karma oferuje tak znakomite funkcje testowania kodu AngularJS, ลผe korzystanie z niego ma sens.
- W AngularJS moลผemy wykonaฤ Testรณw jednostkowych oddzielnie dla kontrolerรณw i dyrektyw.
- Moลผemy rรณwnieลผ wykonaฤ testowanie od koลca do koลca AngularJS, ktรณry polega na testowaniu z perspektywy uลผytkownika.
โ ๏ธ Uwaga dotyczฤ ca wersji: AngularJS (wersja 1.x) oficjalnie zakoลczyล wsparcie techniczne 31 grudnia 2021 r., a ProtracTor zostaล wycofany w sierpniu 2023 roku. Przepลyw pracy opisany na tej stronie nadal obowiฤ zuje w przypadku utrzymania istniejฤ cych aplikacji AngularJS 1.x. Nowe projekty powinny korzystaฤ z nowoczesnego Angulara z aktualnie obsลugiwanym programem uruchamiajฤ cym.
Wprowadzenie i instalacja frameworku Karma
Karma jest narzฤdzie do automatyzacji testรณw stworzone przez zespรณล AngularJS w GooglePierwszym krokiem do korzystania z Karmy jest jej instalacja. Karmฤ instaluje siฤ za pomocฤ npm (menedลผera pakietรณw sลuลผฤ cego do ลatwej instalacji moduลรณw na komputerze lokalnym).
Instalacja Karmy
Instalacja Karmy poprzez npm odbywa siฤ w procesie dwuetapowym.
Krok 1) Wykonaj poniลผszฤ liniฤ z poziomu wiersza poleceล
npm install karma karma-chrome-launcher karma-jasmine --save-dev
W ktรณrym,
- npm to narzฤdzie wiersza poleceล dla menedลผera pakietรณw Node, sลuลผฤ ce do instalowania niestandardowych moduลรณw na dowolnym komputerze. Jest dostarczane z node.js.
- Parametr install informuje narzฤdzie wiersza poleceล npm, ลผe wymagana jest instalacja.
- W wierszu poleceล okreลlone sฤ
3 biblioteki wymagane do pracy z karmฤ
.
- karma jest podstawowฤ bibliotekฤ , ktรณra bฤdzie uลผywana do celรณw testowych.
- karma-chrome-launcher to osobna biblioteka, ktรณra umoลผliwia rozpoznawanie poleceล karmy przez przeglฤ darkฤ Chrome.
- karma-jasmine โ instaluje jaลmin, ktรณry jest zaleลผnym frameworkiem dla Karmy.
Krok 2) Nastฤpnym krokiem jest instalacja narzฤdzia wiersza poleceล karma. Jest to wymagane do wykonywania poleceล linii karmy. Narzฤdzie karma line zostanie uลผyte do zainicjowania ลrodowiska karmy do testรณw.
Aby zainstalowaฤ narzฤdzie wiersza poleceล, wykonaj poniลผszy wiersz z poziomu wiersza poleceล
npm install -g karma-cli
- Karma-cli sลuลผy do instalacji interfejsu wiersza poleceล dla programu Karma, ktรณry bฤdzie uลผywany do zapisywania poleceล programu Karma w interfejsie wiersza poleceล. Flaga -g instaluje go globalnie, dziฤki czemu polecenie Karma jest dostฤpne z dowolnego folderu.
Konfiguracja frameworku Karma
Nastฤpnym krokiem jest skonfigurowanie karmy, czego moลผna dokonaฤ za pomocฤ polecenia
karma init
Po wykonaniu powyลผszego kroku karma utworzy plik karma.conf.js. Plik prawdopodobnie bฤdzie wyglฤ daล jak fragment pokazany poniลผej
files: [ 'node_modules/angular/angular.js', 'node_modules/angular-mocks/angular-mocks.js', 'lib/app.js', 'tests/*.js' ]
Powyลผsze pliki konfiguracyjne przekazujฤ silnikowi wykonawczemu Karma nastฤpujฤ ce informacje
- angular.js โ Daje to karmie sygnaล, ลผe Twoja aplikacja zaleลผy od gลรณwnych moduลรณw AngularJS.
- angular-mocks.js โ Polecenie to informuje karmฤ, aby uลผyลa funkcjonalnoลci testรณw jednostkowych dla AngularJS z pliku angular-mocks.js.
- Wszystkie gลรณwne pliki aplikacji lub logiki biznesowej znajdujฤ siฤ w folderze lib Twojej aplikacji.
- Folder testรณw bฤdzie zawieraล wszystkie testy jednostkowe.
๐ก Wskazรณwka: Kolejnoลฤ ma znaczenie w tablicy plikรณw. Plik angular.js musi zostaฤ zaลadowany przed plikiem angular-mocks.js, a oba muszฤ zostaฤ zaลadowane przed kodem aplikacji. W przeciwnym razie wstrzykiwacz nie bฤdzie dostฤpny po uruchomieniu specyfikacji.
Aby sprawdziฤ czy karma dziaลa utwรณrz plik o nazwie Sample.js, umieลฤ w nim poniลผszy kod i umieลฤ go w katalogu test.
describe('Sample test', function() { it('Condition is true', function() { expect('AngularJS').toBe('AngularJS'); }); });
Powyลผszy kod ma nastฤpujฤ ce aspekty
- Funkcja opisu sลuลผy do opisywania testu. W naszym przypadku do naszego testu nadajemy opis โTest prรณbnyโ.
- Funkcja โitโ sลuลผy do nadania nazwy testowi. W naszym przypadku podajemy nazwฤ naszego testu jako โWarunek jest prawdziwyโ. Nazwa testu musi byฤ zrozumiaลa.
- Kombinacja sลรณw kluczowych โoczekiwaฤโ i โbyฤโ okreลla, jaka jest oczekiwana i rzeczywista wartoลฤ wyniku testu. Jeลli wartoลฤ rzeczywista i oczekiwana sฤ takie same, test zakoลczy siฤ pomyลlnie, w przeciwnym razie zakoลczy siฤ niepowodzeniem.
Po wykonaniu poniลผszego wiersza poleceล zostanie wykonany powyลผszy plik testowy
karma start
Poniลผsze dane wyjลciowe pochodzฤ z IDE Webstorm w ktรณrym wykonano powyลผsze czynnoลci.
- Dane wyjลciowe znajdujฤ siฤ w eksploratorze Karmy Webstorm. To okno pokazuje wykonanie wszystkich testรณw zdefiniowanych w ramach karmy.
- Tutaj moลผesz zobaczyฤ, ลผe pokazany jest opis wykonanego testu, ktรณry jest โTestem prรณbkiโ.
- Nastฤpnie widaฤ, ลผe wykonywany jest sam test o nazwie โWarunek jest prawdziwyโ.
- Naleลผy pamiฤtaฤ, ลผe obok wszystkich testรณw znajduje siฤ zielona ikona โOKโ, ktรณra symbolizuje pomyลlne zakoลczenie wszystkich testรณw.
Czym jest Jasmine w testach jednostkowych AngularJS?
Karma decyduje, gdzie uruchamiane sฤ testy, a Jasmine decyduje, jak sฤ one pisane. Jasmine to framework specyfikacji oparty na zachowaniu, ktรณry dostarcza sลownictwa uลผywanego w kaลผdym przykลadzie na tej stronie. Dlatego adapter karma-jasmine jest instalowany wraz z programem uruchamiajฤ cym.
Jasmine wnosi cztery podstawowe elementy:
- opisaฤ(): Grupuje powiฤ zane specyfikacje w zestaw i akceptuje czytelny opis testowanej jednostki.
- To(): Deklaruje pojedynczฤ specyfikacjฤ. Nazwa powinna okreลlaฤ weryfikowane zachowanie, a nie wywoลywanฤ metodฤ.
- expect() z matcherami: Porรณwnuje wartoลฤ rzeczywistฤ z oczekiwanฤ . Typowe dopasowania to: toBe, toEqual, toContain i toBeDefined.
- beforeEach() i afterEach(): Przeprowadลบ konfiguracjฤ i demontaลผ przed i po kaลผdej specyfikacji, dziฤki czemu kaลผdy test pozostanie niezaleลผny.
Jasmine oferuje rรณwnieลผ szpiegรณw. Szpieg zastฤpuje rzeczywistฤ funkcjฤ zarejestrowanym zastฤpstwem, dziฤki czemu kontroler moลผna testowaฤ bez wywoลywania aktywnego punktu koลcowego HTTP. Poniewaลผ Jasmine nie potrzebuje DOM ani wลasnej biblioteki asercji, poลฤ czenie Karmy i Jasmine pozostaje najlลผejszym sposobem na uruchomienie AngularJS. JavaTesty jednostkowe skryptรณw.
Testowanie kontrolerรณw AngularJS
Struktura testowania karmy ma rรณwnieลผ funkcjฤ kompleksowego testowania kontrolerรณw. Obejmuje to testowanie obiektu $scope uลผywanego w kontrolerach.
Spรณjrzmy na przykลad, jak moลผemy to osiฤ gnฤ ฤ.
W naszym przykลadzie
Najpierw musielibyลmy zdefiniowaฤ kontroler. Ten kontroler wykona poniลผsze kroki
- Utwรณrz zmiennฤ ID i przypisz jej wartoลฤ 5.
- Przypisz zmiennฤ ID do obiektu $scope.
Nasz test sprawdzi istnienie tego kontrolera, a takลผe sprawdzi, czy zmienna ID obiektu $scope jest ustawiona na 5.
Najpierw musimy siฤ upewniฤ, ลผe speลnione sฤ nastฤpujฤ ce warunki wstฤpne
Zainstaluj bibliotekฤ Angular-Mocks za pomocฤ npm. Moลผesz to zrobiฤ, wykonujฤ c poniลผszy wiersz polecenia w wierszu poleceล.
npm install angular-mocks --save-dev
Nastฤpnie naleลผy zmodyfikowaฤ plik karma.conf.js, aby upewniฤ siฤ, ลผe do testu zostanฤ doลฤ czone odpowiednie pliki. Poniลผszy segment pokazuje tylko czฤลฤ plikรณw karma.conf.js, ktรณra wymaga modyfikacji
files: ['lib/angular.js', 'lib/angular-mocks.js', 'lib/index.js', 'test/*.js']
- Parametr โplikiโ w zasadzie informuje Karmฤ o wszystkich plikach wymaganych do przeprowadzenia testรณw.
- Pliki angular.js i angular-mocks.js sฤ wymagane do uruchomienia testรณw jednostkowych AngularJS
- Plik Index.js bฤdzie zawieraล nasz kod dla kontrolera
- Folder test bฤdzie zawieraล wszystkie nasze testy AngularJS
Poniลผej znajduje siฤ nasz kod AngularJS, ktรณry zostanie zapisany jako plik Index.js w folderze testowym naszej aplikacji.
Poniลผszy kod wykonuje nastฤpujฤ ce czynnoลci
- Tworzenie Moduล AngularJS o nazwie przykลadowa aplikacja
- Utwรณrz kontroler o nazwie AngularJSController
- Utwรณrz zmiennฤ o nazwie ID, nadaj jej wartoลฤ 5 i przypisz jฤ do obiektu $scope
var sampleApp = angular.module('sampleApp', []); sampleApp.controller('AngularJSController', function($scope) { $scope.ID = 5; });
Po pomyลlnym wykonaniu powyลผszego kodu nastฤpnym krokiem bฤdzie utworzenie pliku Przypadek testowy aby upewniฤ siฤ, ลผe kod zostaล napisany i wykonany poprawnie.
Kod naszego testu bฤdzie taki, jak pokazano poniลผej.
Kod bฤdzie w osobnym pliku o nazwie ControllerTest.js, ktรณry zostanie umieszczony w folderze test. Poniลผszy kod wykonuje nastฤpujฤ ce kluczowe czynnoลci
- Funkcja beforeEach โ Ta funkcja sลuลผy do zaลadowania naszego moduลu AngularJS o nazwie โsampleAppโ przed uruchomieniem testu. Naleลผy pamiฤtaฤ, ลผe jest to nazwa moduลu w pliku index.js.
- Obiekt $controller jest tworzony jako obiekt-makieta dla kontrolera โAngularJSControllerโ, ktรณry jest zdefiniowany w pliku index.js. W kaลผdym rodzaju testรณw jednostkowych obiekt-makieta reprezentuje obiekt-fisz, ktรณry bฤdzie faktycznie uลผywany do testowania. Ten obiekt-makieta bฤdzie symulowaล zachowanie naszego kontrolera.
- beforeEach(inject(function(_$controller_)) โ Sลuลผy do wstrzykniฤcia prรณbnego obiektu w naszym teลcie, tak aby zachowywaล siฤ jak rzeczywisty kontroler.
- var $zakres = {}; To jest obiekt prรณbny tworzony dla obiektu $scope.
- var controller = $controller('AngularJSController', { $scope: $scope }); โ Tutaj sprawdzamy istnienie kontrolera o nazwie โAngularJSControllerโ. Tutaj przypisujemy rรณwnieลผ wszystkie zmienne z obiektu $scope w kontrolerze w pliku Index.js do obiektu $scope w pliku testowym.
- Na koniec porรณwnujemy $scope.ID z 5
describe('AngularJSController', function() { beforeEach(module('sampleApp')); var $controller; beforeEach(inject(function(_$controller_){ $controller = _$controller_; })); describe('$scope.ID', function() { it('Check the scope object', function() { var $scope = {}; var controller = $controller('AngularJSController', { $scope: $scope }); expect($scope.ID).toEqual(5); }); }); });
Powyลผszy test zostanie uruchomiony w przeglฤ darce karmy i da taki sam wynik pozytywny, jak pokazano w poprzednim temacie.
Testowanie dyrektyw AngularJS
Struktura testowania karmy oferuje rรณwnieลผ funkcjonalnoลฤ testowania dyrektyw niestandardowych. Obejmuje to szablonURLktรณre sฤ uลผywane w dyrektywach niestandardowych.
Spรณjrzmy na przykลad, jak moลผemy to osiฤ gnฤ ฤ.
W naszym przykลadzie najpierw zdefiniujemy niestandardowฤ dyrektywฤ, ktรณra wykonuje nastฤpujฤ ce czynnoลci
- Utwรณrz moduล AngularJS o nazwie sampleApp
- Utwรณrz niestandardowฤ dyrektywฤ o nazwie โ guru99
- Utwรณrz funkcjฤ zwracajฤ cฤ szablon ze znacznikiem nagลรณwka wyลwietlajฤ cym tekst โTo jest testowanie AngularJSโ.
var sampleApp = angular.module('sampleApp', []); sampleApp.directive('guru99', function () { return { restrict: 'E', replace: true, template: '<h1>This is AngularJS Testing</h1>' }; });
Po pomyลlnym wykonaniu powyลผszego kodu nastฤpnym krokiem bฤdzie utworzenie przypadku testowego, aby upewniฤ siฤ, ลผe kod zostaล napisany i wykonany poprawnie. Kod naszego testu bฤdzie taki, jak pokazano poniลผej
Kod bฤdzie w osobnym pliku o nazwie DirectiveTest.js, ktรณry zostanie umieszczony w folderze test. Poniลผszy kod wykonuje nastฤpujฤ ce kluczowe czynnoลci
- Funkcja beforeEach โ Ta funkcja sลuลผy do zaลadowania naszego moduลu AngularJS o nazwie โsampleAppโ przed uruchomieniem testu.
- Usลuga $compile sลuลผy do kompilowania dyrektywy. Ta usลuga jest obowiฤ zkowa i musi zostaฤ zadeklarowana, aby AngularJS mรณgล jej uลผyฤ do skompilowania naszej niestandardowej dyrektywy.
- $rootScope to podstawowy zakres dowolnej aplikacji AngularJS. Widzieliลmy obiekt $scope kontrolera w poprzednich rozdziaลach. Obiekt $scope jest obiektem podrzฤdnym obiektu $rootScope. Powodem jego deklaracji jest to, ลผe wprowadzamy zmianฤ w rzeczywistym znaczniku HTML w DOM za pomocฤ naszej dyrektywy niestandardowej. Dlatego musimy skorzystaฤ z usลugi $rootScope, ktรณra faktycznie nasลuchuje lub rozpoznaje zmiany zachodzฤ ce w dokumencie HTML.
- element var = $compile(โ โ)($rootScope) โ Sลuลผy do sprawdzenia, czy nasza dyrektywa zostanie wstrzykniฤta prawidลowo. Dyrektywa jest zarejestrowana z nazwฤ guru99 w formacie camel case, wiฤc AngularJS dopasowuje element pisany maลymi literami. w znaczniku. Dlatego do przeprowadzenia tej kontroli uลผywa siฤ tego polecenia.
- expect(element.html()).toContain(โTo jest testowanie AngularJSโ) โ sลuลผy do poinstruowania funkcji expect, ลผe powinna znaleลบฤ element (w naszym przypadku tag h1) zawierajฤ cy tekst innerHTML โTo jest testowanie AngularJSโ.
describe('Unit testing directives', function() { var $compile, $rootScope; beforeEach(module('sampleApp')); beforeEach(inject(function(_$compile_, _$rootScope_){ $compile = _$compile_; $rootScope = _$rootScope_; })); it('Check the directive', function() { // Compile a piece of HTML containing the directive var element = $compile("<guru99></guru99>")($rootScope); $rootScope.$digest(); expect(element.html()).toContain("This is AngularJS Testing"); }); });
Powyลผszy test zostanie uruchomiony w przeglฤ darce karmy i da taki sam wynik pozytywny, jak pokazano w poprzednim temacie.
Testowanie aplikacji AngularJS od poczฤ tku do koลca
Struktura testowania karmy wraz z strukturฤ o nazwie ProtracTor umoลผliwia testowanie aplikacji internetowych od poczฤ tku do koลca.
Zatem nie jest to tylko testowanie dyrektyw i kontrolerรณw, ale takลผe testowanie czegokolwiek innego, co moลผe pojawiฤ siฤ na stronie HTML.
Spรณjrzmy na przykลad, jak moลผemy to osiฤ gnฤ ฤ.
W naszym przykลadzie poniลผej bฤdziemy mieฤ aplikacjฤ AngularJS, ktรณra tworzy tabelฤ danych za pomocฤ dyrektywy ng-repeat.
- Najpierw tworzymy zmiennฤ o nazwie โsamouczekโ i przypisujemy jej kilka par klucz-wartoลฤ w jednym kroku. Kaลผda para klucz-wartoลฤ bฤdzie uลผywana jako dane podczas wyลwietlania tabeli. Zmienna samouczka jest nastฤpnie przypisywana do obiektu zakresu, tak aby moลผna byลo uzyskaฤ do niej dostฤp z naszego widoku.
- Dla kaลผdego wiersza danych w tabeli uลผywamy dyrektywy ng-repeat. Ta dyrektywa przechodzi przez kaลผdฤ parฤ klucz-wartoลฤ w obiekcie zakresu tutoriala przy uลผyciu zmiennej ptutor.
- Na koniec uลผywamy tag wraz z parami klucz-wartoลฤ (ptutor.Name i ptutor.Description), aby wyลwietliฤ dane tabeli.
<table> <tr ng-repeat="ptutor in tutorial"> <td>{{ ptutor.Name }}</td> <td>{{ ptutor.Description }}</td> </tr> </table> </div> <script type="text/javascript"> var app = angular.module('DemoApp', []); app.controller('DemoController', function($scope) { $scope.tutorial = [ {Name: "Controllers", Description: "Controllers in action"}, {Name: "Models", Description: "Models and binding data"}, {Name: "Directives", Description: "Flexibility of Directives"} ]; });
Po pomyลlnym wykonaniu powyลผszego kodu nastฤpnym krokiem bฤdzie utworzenie przypadku testowego, aby upewniฤ siฤ, ลผe kod zostaล napisany i wykonany poprawnie. Kod naszego testu bฤdzie taki, jak pokazano poniลผej
Nasz test tak naprawdฤ przetestuje dyrektywฤ ng-repeat i upewni siฤ, ลผe zawiera ona 3 wiersze danych, tak jak powinno to wynikaฤ z powyลผszego przykลadu.
Najpierw musimy siฤ upewniฤ, ลผe speลnione sฤ nastฤpujฤ ce warunki wstฤpne
Zainstaluj wersjฤ protracBiblioteka Tor przez npm. Moลผna to zrobiฤ, wykonujฤ c poniลผszy wiersz w wierszu poleceล.
npm install -g protractor
Kod naszego testu bฤdzie taki, jak pokazano poniลผej.
Kod bฤdzie w osobnym pliku o nazwie CompleteTest.js, ktรณry zostanie umieszczony w folderze test. Poniลผszy kod wykonuje nastฤpujฤ ce kluczowe rzeczy
- Funkcja przeglฤ darki jest zapewniana przez profesjonalistฤtracbiblioteka tor i zakลada, ลผe โโnasza aplikacja AngularJS (z kodem pokazanym powyลผej) dziaลa na naszej stronie URL โ http://localhost:8080/Guru99 /
- var list = element.all(by.repeater('ptutor in tutorial')); - Ten wiersz kodu w rzeczywistoลci pobiera dyrektywฤ ng-repeat, ktรณra jest wypeลniana przez kod โptutor in tutorialโ. Element i by.repeater to specjalne sลowa kluczowe dostarczane przez programistฤ.tracBiblioteka tor umoลผliwiajฤ ca uzyskanie szczegรณลรณw dyrektywy ng-repeat.
- oczekiwaฤ(list.liczba()).toEqual(3); โ Na koniec uลผywamy funkcji oczekiwanie, aby sprawdziฤ, czy rzeczywiลcie w wyniku dyrektywy ng-repeat rzeczywiลcie zapeลniajฤ siฤ 3 pozycje w naszej tabeli.
describe('Unit testing end to end', function() { beforeEach(function() { browser.get('http://localhost:8080/Guru99/'); }); it('Check the ng directive', function() { var list = element.all(by.repeater('ptutor in tutorial')); expect(list.count()).toEqual(3); }); });
Powyลผszy test zostanie uruchomiony w przeglฤ darce karmy i da taki sam wynik pozytywny, jak pokazano w poprzednim temacie.
Karma kontra Jasmine kontra Protractor: Kluczowe rรณลผnice
Trzy narzฤdzia uลผywane na tej stronie sฤ czฤsto mylone, poniewaลผ pojawiajฤ siฤ w tym samym wierszu poleceล. Kaลผde z nich zajmuje innฤ warstwฤ stosu testowego, co jasno pokazuje poniลผsza tabela.
| Parametr | Karma | Jaลmin | ProtracTor |
| Kategoria | Tester | Ramy specyfikacji | Kompleksowa struktura automatyzacji |
| Gลรณwne zadanie | Uruchamia przeglฤ darki i raportuje wyniki | Zapewnia opis, to i oczekiwanie | Uruchamia aplikacjฤ na ลผywo w prawdziwej przeglฤ darce |
| Poziom testowy | Jednostka i integracja | Jednostka i integracja | Od koลca do koลca |
| Wymaga dziaลajฤ cego serwera | Nie | Nie | Tak |
| plik konfiguracyjny | karma.conf.js | ลปadnego, dziaลa wewnฤ trz biegacza | dlatractor.conf.js |
| Aktualny status | Wycofane, tylko konserwacja | Aktywnie utrzymywane | Przeszedล na emeryturฤ w sierpniu 2023 r. |
Krรณtko mรณwiฤ c, Jasmine pisze test, Karma go wykonuje, a Protractor rozszerza tฤ samฤ skลadniฤ Jasmine na w peลni renderowanฤ stronฤ.
Najlepsze praktyki testowania jednostkowego AngularJS
Zestaw kilku nawykรณw sprawia, ลผe โโpakiet AngularJS pozostaje szybki i niezawodny, nawet gdy aplikacja siฤ rozrasta.
- Testuj jednฤ jednostkฤ na raz. Zaลaduj tylko moduล podlegajฤ cy testowi w beforeEach i zasymuluj kaลผdego wspรณลpracownika, tak aby bลฤ d wskazywaล na pojedynczy plik.
- Nigdy nie dzwoล do prawdziwego zaplecza. Uลผyj usลugi $httpBackend z Angular-mocks, aby zwrรณciฤ gotowe odpowiedzi. Testy sฤ nastฤpnie uruchamiane w trybie offline i generujฤ identyczne wyniki na kaลผdej maszynie.
- Zachowaj behawioralny charakter nazw specyfikacji. Nazwa taka jak โzwraca 5 po zainicjowaniu kontroleraโ bฤdzie lepiej czytelna w raporcie niลผ โtest1โ.
- Zawsze przepลukuj cykl trawienia. Wywoลaj $rootScope.$digest() po zmianie danych zakresu, w przeciwnym razie powiฤ zania i obserwatorzy nigdy siฤ nie zaktualizujฤ , a asercje zakoลczฤ siฤ niepowodzeniem z niewลaลciwego powodu.
- Zmierz zasiฤg, ale oceล go ostroลผnie. Dodaj karma-coverage, aby zobaczyฤ nieprzetestowane gaลฤzie. Wysokie pokrycie przy sลabych asercjach nadal ukrywa defekty.
- Uruchom pakiet w trybie ciฤ gลej integracji. Uลผyj bezobsลugowego programu uruchamiajฤ cego Chrome, aby te same specyfikacje byลy wykonywane przy kaลผdym zatwierdzeniu, a nie tylko na komputerze dewelopera.
Zastosowanie tych zasad sprawia, ลผe โโpowyลผsze przykลady z odosobnionych demonstracji stajฤ siฤ siatkฤ bezpieczeลstwa regresji dla starszej bazy kodu AngularJS. Aby uzyskaฤ szerszy obraz, zobacz Samouczek AngularJS series.

