AngularJS-enhetstestning med Karma och Jasmine

โšก Smart sammanfattning

AngularJS-enhetstestning med Karma och Jasmine verifierar kontroller, direktiv och tjรคnster isolerat. Karma kรถr specifikationer inuti riktiga webblรคsare, Jasmine tillhandahรฅller assertionssyntaxen och angular-mocks injicerar beroenden utan en aktiv server.

  • ๐Ÿงฑ Verktygsdelning: Karma รคr testlรถparen, Jasmine รคr specifikationsramverket och angular-mocks tillhandahรฅller hjรคlpmedel fรถr beroendeinjektion.
  • โš™๏ธ Installationssรถkvรคg: Installera karma, karma-chrome-launcher, karma-jasmine och karma-cli via npm och generera sedan karma.conf.js.
  • ๐Ÿ“ Konfigurationsregel: Filmatrisen mรฅste lista angular.js, angular-mocks.js, applikationskรคllor och testmappen i den ordningen.
  • ๐ŸŽ›๏ธ Kontrolltestning: Injicera $controller-tjรคnsten, skicka ett mock $scope-objekt och bekrรคfta sedan de vรคrden som kontrollanten tilldelar.
  • ๐Ÿงฉ Direktivtestning: Anvรคnd $compile med $rootScope, anropa $digest och inspektera den renderade markupen som returneras av direktivet.
  • ๐ŸŒ ร„nd-till-รคnde-lager: Protractor driver en kรถrande applikation och rรคknar upprepade rader som produceras av ng-repeat.
  • ๐Ÿ“Œ Supportstatus: AngularJS nรฅdde slutet av sin livscykel den 31 december 2021, sรฅ behandla detta arbetsflรถde som รคldre underhรฅllskunskap.

AngularJS-enhetstestning med Karma och Jasmine

En av de mest briljanta funktionerna i AngularJS รคr Testning aspekt. Nรคr utvecklarna pรฅ Google Nรคr de utvecklade AngularJS hade de testning i รฅtanke och sรฅg till att hela AngularJS-ramverket var testbart.

I AngularJS utfรถrs testning normalt med hjรคlp av Karma (ramverk). AngularJS-testning kan utfรถras utan Karma, men Karma-ramverket har en sรฅ lysande funktionalitet fรถr att testa AngularJS-kod att det รคr vettigt att anvรคnda detta ramverk.

โš ๏ธ Versionsinformation: AngularJS (version 1.x) nรฅdde officiellt slutet av sin livscykel den 31 december 2021, och Protractor togs ur bruk i augusti 2023. Arbetsflรถdet pรฅ den hรคr sidan fรถrblir giltigt fรถr underhรฅll av befintliga AngularJS 1.x-applikationer. Nya projekt bรถr anvรคnda moderna Angular med en runner som fรถr nรคrvarande stรถds.

Introduktion och installation av Karma-ramverket

Karma รคr en testautomationsverktyg skapad av AngularJS-teamet pรฅ GoogleDet fรถrsta steget fรถr att anvรคnda Karma รคr att installera Karma. Karma installeras via npm (vilket รคr en pakethanterare som anvรคnds fรถr enkel installation av moduler pรฅ en lokal maskin).

Installation av Karma

Installationen av Karma via npm gรถrs i en tvรฅstegsprocess.

Steg 1) Utfรถr raden nedan frรฅn kommandoraden

npm install karma karma-chrome-launcher karma-jasmine --save-dev

Vart i,

  1. npm รคr kommandoradsverktyget fรถr nodens pakethanterare som anvรคnds fรถr att installera anpassade moduler pรฅ vilken maskin som helst. Det levereras med node.js.
  2. Installationsparametern instruerar kommandoradsverktyget npm att installation krรคvs.
  3. Det finns 3 bibliotek som anges pรฅ kommandoraden som krรคvs fรถr att arbeta med karma.
    • karma รคr kรคrnbiblioteket som kommer att anvรคndas fรถr testรคndamรฅl.
    • karma-chrome-launcher รคr ett separat bibliotek som gรถr att karma-kommandon kan identifieras av Chrome-webblรคsaren.
    • karma-jasmin โ€“ Detta installerar jasmin som รคr ett beroende ramverk fรถr karma.

Steg 2) Nรคsta steg รคr att installera kommandoradsverktyget karma. Detta krรคvs fรถr att utfรถra karma-linjekommandon. Karmalinjeverktyget kommer att anvรคndas fรถr att initiera karmamiljรถn fรถr testning.

Fรถr att installera kommandoradsverktyget, kรถr raden nedan frรฅn kommandoraden

npm install -g karma-cli
  • karma-cli anvรคnds fรถr att installera kommandoradsgrรคnssnittet fรถr karma, vilket kommer att anvรคndas fรถr att skriva karma-kommandona i kommandoradsgrรคnssnittet. Flaggan -g installerar det globalt sรฅ att karma-kommandot รคr tillgรคngligt frรฅn vilken mapp som helst.

Konfiguration av Karma-ramverket

Nรคsta steg รคr att konfigurera karma som kan gรถras via kommandot

karma init

Efter att steget ovan har utfรถrts kommer karma att skapa en karma.conf.js-fil. Filen kommer fรถrmodligen att se ut som utdraget som visas nedan

files: [
  'node_modules/angular/angular.js',
  'node_modules/angular-mocks/angular-mocks.js',
  'lib/app.js',
  'tests/*.js'
]

Ovanstรฅende konfigurationsfiler berรคttar fรถr karma runtime-motorn fรถljande saker

  1. angular.js โ€“ Detta sรคger karma att din applikation รคr beroende av kรคrnmodulerna i AngularJS.
  2. angular-mocks.js โ€“ Detta anger att karma ska anvรคnda enhetstestfunktionen fรถr AngularJS frรฅn filen angular-mocks.js.
  3. Alla huvudapplikations- eller affรคrslogikfiler finns i lib-mappen i din applikation.
  4. Testmappen kommer att innehรฅlla alla enhetstester.

๐Ÿ’ก Tips: Ordningen inom files-arrayen spelar roll. angular.js mรฅste laddas fรถre angular-mocks.js, och bรฅda mรฅste laddas fรถre din applikationskod, annars รคr injektorn inte tillgรคnglig nรคr specifikationerna kรถrs.

Fรถr att kontrollera om karma fungerar, skapa en fil som heter Sample.js, lรคgg in koden nedan och placera den i testkatalogen.

describe('Sample test', function() {
  it('Condition is true', function() {
    expect('AngularJS').toBe('AngularJS');
  });
});

Ovanstรฅende kod har fรถljande aspekter

  1. Beskriv-funktionen anvรคnds fรถr att ge en beskrivning av testet. I vรฅrt fall ger vi beskrivningen "Sample test" till vรฅrt test.
  2. Funktionen 'it' anvรคnds fรถr att ge testet ett namn. I vรฅrt fall anger vi namnet pรฅ vรฅrt test som "villkoret รคr sant". Namnet pรฅ testet mรฅste vara meningsfullt.
  3. Kombinationen av nyckelorden 'fรถrvรคnta' och 'toBe' anger vad som รคr det fรถrvรคntade och faktiska vรคrdet av testresultatet. Om det faktiska och fรถrvรคntade vรคrdet รคr detsamma, kommer testet att klara, annars misslyckas det.

Nรคr du kรถr fรถljande rad vid kommandotolken kommer den att kรถra ovanstรฅende testfil

karma start

Utdata nedan รคr hรคmtad frรฅn IDE Webstorm dรคr ovanstรฅende steg utfรถrdes.

Konfiguration av Karma-ramverket

  1. Utdata kommer i Karma explorer inom Webstorm. Detta fรถnster visar utfรถrandet av alla tester som รคr definierade i karma-ramverket.
  2. Hรคr kan du se att beskrivningen av det utfรถrda testet visas som รคr "Sample test".
  3. Dรคrefter kan du se att sjรคlva testet som har namnet "Condition is true" exekveras.
  4. Observera att eftersom alla tester har den grรถna "Ok"-ikonen bredvid sig som symboliserar att alla tester รคr godkรคnda.

Vad รคr Jasmine i AngularJS enhetstestning?

Karma bestรคmmer var tester kรถrs, medan Jasmine bestรคmmer hur de skrivs. Jasmine รคr ett beteendedrivet specifikationsramverk som tillhandahรฅller vokabulรคren som anvรคnds i varje exempel pรฅ den hรคr sidan, vilket รคr anledningen till att karma-jasmine-adaptern installeras bredvid lรถparen.

Jasmine bidrar med fyra byggstenar:

  • beskriva(): Grupperar relaterade specifikationer i en svit och accepterar en lรคsbar beskrivning av den enhet som testas.
  • det(): Deklarerar en enda specifikation. Namnet bรถr ange beteendet som verifieras snarare รคn metoden som anropas.
  • fรถrvรคnta() med matchare: Jรคmfรถr ett faktiskt vรคrde med ett fรถrvรคntat. Vanliga matchningar inkluderar toBe, toEqual, toContain och toBeDefined.
  • fรถreVarje() och efterVarje(): Kรถr installation och nedmontering fรถre och efter varje specifikation, vilket hรฅller varje test oberoende.

Jasmine erbjuder รคven spioner. En spion ersรคtter en verklig funktion med en inspelad stรคllfunktion, sรฅ en kontroller kan testas utan att anropa en live HTTP-slutpunkt. Eftersom Jasmine inte behรถver nรฅgon DOM och inget eget assertionbibliotek, รคr kombinationen av Karma och Jasmine fortfarande det enklaste sรคttet att kรถra AngularJS. JavaSkriptenhetstester.

Testar AngularJS-kontroller

Karmatestramverket har ocksรฅ funktionen att testa Controllers frรฅn bรถrjan till slut. Detta inkluderar testning av $scope-objektet som anvรคnds inom Controllers.

Lรฅt oss titta pรฅ ett exempel pรฅ hur vi kan uppnรฅ detta.

I vรฅrt exempel,

Vi skulle fรถrst behรถva definiera en styrenhet. Denna styrenhet skulle utfรถra de nedan nรคmnda stegen

  1. Skapa en ID-variabel och tilldela vรคrdet 5 till den.
  2. Tilldela ID-variabeln till $scope-objektet.

Vรฅrt test kommer att testa fรถrekomsten av denna kontroller och รคven testa fรถr att se om ID-variabeln fรถr $scope-objektet รคr instรคlld pรฅ 5.

Fรถrst mรฅste vi se till att fรถljande fรถrutsรคttning รคr pรฅ plats

Installera angular-mocks-biblioteket via npm. Detta kan gรถras genom att kรถra raden nedan i kommandotolken.

npm install angular-mocks --save-dev

Nรคsta รคr att modifiera filen karma.conf.js fรถr att sรคkerstรคlla att rรคtt filer ingรฅr fรถr testet. Segmentet nedan visar bara fildelen av karma.conf.js som behรถver modifieras

files: ['lib/angular.js', 'lib/angular-mocks.js', 'lib/index.js', 'test/*.js']
  • Parametern 'filer' berรคttar i princip fรถr Karma alla filer som krรคvs fรถr att kรถra testerna.
  • Filerna angular.js och angular-mocks.js krรคvs fรถr att kรถra AngularJS-enhetstester.
  • Filen index.js kommer att innehรฅlla vรฅr kod fรถr styrenheten
  • Testmappen kommer att innehรฅlla alla vรฅra AngularJS-tester

Nedan fรถljer vรฅr AngularJS-kod som kommer att lagras som en Index.js-fil i testmappen i vรฅr applikation.

Koden nedan gรถr bara fรถljande saker

  1. Skapa ett AngularJS-modul kallas sampleApp
  2. Skapa en kontroller som heter AngularJSController
  3. Skapa en variabel som heter ID, ge den vรคrdet 5 och tilldela den till $scope-objektet
var sampleApp = angular.module('sampleApp', []);
sampleApp.controller('AngularJSController', function($scope) {
  $scope.ID = 5;
});

Nรคr ovanstรฅende kod har kรถrts framgรฅngsrikt, skulle nรคsta steg vara att skapa en Testfall fรถr att sรคkerstรคlla att koden har skrivits och kรถrts korrekt.

Koden fรถr vรฅrt test kommer att vara som visas nedan.

Koden kommer att finnas i en separat fil som heter ControllerTest.js, som kommer att placeras i testmappen. Koden nedan gรถr bara fรถljande viktiga saker

  1. beforeEach-funktionen โ€“ Den hรคr funktionen anvรคnds fรถr att ladda vรฅr AngularJS-modul som heter 'sampleApp' fรถre testkรถrningen. Observera att detta รคr namnet pรฅ modulen i en index.js-fil.
  2. $controller-objektet skapas som ett mockup-objekt fรถr kontrollenheten "AngularJSController" som definieras i vรฅr index.js-fil. I alla typer av enhetstestning representerar ett mock-objekt ett dummy-objekt som faktiskt kommer att anvรคndas fรถr testningen. Detta mock-objekt kommer faktiskt att simulera beteendet hos vรฅr kontrollenhet.
  3. beforeEach(inject(function(_$controller_) โ€“ Detta anvรคnds fรถr att injicera skenobjektet i vรฅrt test sรฅ att det beter sig som den faktiska kontrollern.
  4. var $scope = {}; Detta รคr ett skenobjekt som skapas fรถr $scope-objektet.
  5. var controller = $controller('AngularJSController', { $scope: $scope }); โ€“ Hรคr kontrollerar vi om det finns en kontroller med namnet 'AngularJSController'. Hรคr tilldelar vi ocksรฅ alla variabler frรฅn vรฅrt $scope-objekt i vรฅr kontroller i Index.js-filen till $scope-objektet i vรฅr testfil.
  6. Slutligen jรคmfรถr vi $scope.ID med 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);
    });
  });
});

Ovanstรฅende test kรถrs i karma-webblรคsaren och ger samma godkรคnt resultat som visades i fรถregรฅende avsnitt.

Testa AngularJS-direktiv

Karma-testramverket har รคven funktionalitet fรถr att testa anpassade direktiv. Detta inkluderar mallen.URLsom anvรคnds inom anpassade direktiv.

Lรฅt oss titta pรฅ ett exempel pรฅ hur vi kan uppnรฅ detta.

I vรฅrt exempel kommer vi fรถrst att definiera ett anpassat direktiv som gรถr fรถljande saker

  1. Skapa en AngularJS-modul som heter sampleApp
  2. Skapa ett anpassat direktiv med namnet โ€“ guru99
  3. Skapa en funktion som returnerar en mall med en header-tagg som visar texten "This is AngularJS Testing."
var sampleApp = angular.module('sampleApp', []);
sampleApp.directive('guru99', function () {
  return {
    restrict: 'E',
    replace: true,
    template: '<h1>This is AngularJS Testing</h1>'
  };
});

Nรคr koden ovan har exekveras framgรฅngsrikt, skulle nรคsta steg vara att skapa ett testfall fรถr att sรคkerstรคlla att koden har skrivits och exekveras korrekt. Koden fรถr vรฅrt test kommer att vara som visas nedan

Koden kommer att finnas i en separat fil som heter DirectTest.js, som kommer att placeras i testmappen. Koden nedan gรถr bara fรถljande viktiga saker

  1. beforeEach-funktion โ€“ Den hรคr funktionen anvรคnds fรถr att ladda vรฅr AngularJS-modul som heter 'sampleApp' fรถre testkรถrningen.
  2. Tjรคnsten $compile anvรคnds fรถr att kompilera direktivet. Denna tjรคnst รคr obligatorisk och mรฅste deklareras sรฅ att AngularJS kan anvรคnda den fรถr att kompilera vรฅrt anpassade direktiv.
  3. $rootScope รคr det primรคra scopet fรถr alla AngularJS-applikationer. Vi har sett $scope-objektet fรถr kontrollenheten i tidigare kapitel. $scope-objektet รคr underobjektet till $rootScope-objektet. Anledningen till att detta deklareras hรคr รคr att vi gรถr en รคndring av en faktisk HTML-tagg i DOM-koden via vรฅrt anpassade direktiv. Dรคrfรถr behรถver vi anvรคnda $rootScope-tjรคnsten som faktiskt lyssnar eller vet nรคr en รคndring sker inifrรฅn ett HTML-dokument.
  4. var element = $kompilera(" โ€)($rootScope) โ€“ Detta anvรคnds fรถr att kontrollera om vรฅrt direktiv injiceras som det ska. Direktivet รคr registrerat med det camel case-namnet guru99, sรฅ AngularJS matchar det gemena elementet i markupen. Dรคrfรถr anvรคnds denna sats fรถr att gรถra den kontrollen.
  5. expect(element.html()).toContain(โ€œDetta รคr AngularJS-testningโ€) โ€“ Detta anvรคnds fรถr att instruera expect-funktionen att den ska hitta elementet (i vรฅrt fall h1-taggen) sรฅ att det innehรฅller innerHTML-texten fรถr โ€œDetta รคr AngularJS-testningโ€.
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");
  });
});

Ovanstรฅende test kรถrs i karma-webblรคsaren och ger samma godkรคnt resultat som visades i fรถregรฅende avsnitt.

End-to-End-testning av AngularJS-applikationer

Ramverket fรถr karmatestning tillsammans med ett ramverk som heter Protractor har funktionen att testa en webbapplikation frรฅn bรถrjan till slut.

Sรฅ det รคr inte bara testning av direktiv och kontroller, utan รคven testning av allt annat som kan dyka upp pรฅ en HTML-sida.

Lรฅt oss titta pรฅ ett exempel pรฅ hur vi kan uppnรฅ detta.

I vรฅrt exempel nedan kommer vi att ha en AngularJS-applikation som skapar en datatabell med ng-repeat-direktivet.

  1. Vi skapar fรถrst en variabel som heter "tutorial" och tilldelar den nรฅgra nyckel-vรคrdepar i ett steg. Varje nyckel-vรคrdepar kommer att anvรคndas som data nรคr tabellen visas. Handledningsvariabeln tilldelas sedan scope-objektet sรฅ att den kan nรฅs frรฅn vรฅr vy.
  2. Fรถr varje rad med data i tabellen anvรคnder vi direktivet ng-repeat. Detta direktiv gรฅr igenom varje nyckel-vรคrdepar i tutorial scope-objektet med hjรคlp av variabeln ptutor.
  3. Slutligen anvรคnder vi tagga tillsammans med nyckelvรคrdeparen (ptutor.Name och ptutor.Description) fรถr att visa tabelldata.
<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"}
  ];
});

Nรคr koden ovan har exekveras framgรฅngsrikt, skulle nรคsta steg vara att skapa ett testfall fรถr att sรคkerstรคlla att koden har skrivits och exekveras korrekt. Koden fรถr vรฅrt test kommer att vara som visas nedan

Vรฅrt test kommer faktiskt att testa direktivet ng-repeat och sรคkerstรคlla att det innehรฅller 3 rader med data som det ska frรฅn exemplet ovan.

Fรถrst mรฅste vi se till att fรถljande fรถrutsรคttning รคr pรฅ plats

Installera proffsettractor-biblioteket via npm. Detta kan gรถras genom att kรถra raden nedan i kommandotolken

npm install -g protractor

Koden fรถr vรฅrt test kommer att vara som visas nedan.

Koden kommer att finnas i en separat fil som heter CompleteTest.js , som kommer att placeras i testmappen. Koden nedan gรถr bara fรถljande viktiga saker

  1. Webblรคsarfunktionen tillhandahรฅlls av proffsentractor-biblioteket och antar att vรฅr AngularJS-applikation (med koden som visas ovan) kรถrs pรฅ vรฅr webbplats URL โ€“ http://lokalvรคrd:8080/Guru99 /
  2. var list = element.all(by.repeater('ptutor in tutorial')); -Denna kodrad hรคmtar faktiskt ng-repeat-direktivet som รคr ifyllt med koden 'ptutor in tutorial'. Elementet och by.repeater รคr speciella nyckelord som tillhandahรฅlls av proen.tractor-bibliotek som lรฅter oss fรฅ detaljer om ng-repeat-direktivet.
  3. fรถrvรคnta(list.count()).toEqual(3); โ€“ Slutligen anvรคnder vi fรถrvรคnta-funktionen fรถr att se att vi verkligen fรฅr 3 poster som fylls i vรฅr tabell som ett resultat av ng-repeat-direktivet.
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);
  });
});

Ovanstรฅende test kรถrs i karma-webblรคsaren och ger samma godkรคnt resultat som visades i fรถregรฅende avsnitt.

Karma vs Jasmine vs Protractor: Viktiga skillnader

De tre verktygen som anvรคnds pรฅ den hรคr sidan fรถrvรคxlas ofta eftersom de visas i samma kommandorad. Var och en upptar ett annat lager i teststacken, vilket tabellen nedan visar.

Parameter Karma Jasmin Protractor
Kategori Testlรถpare Specifikationsramverk Ramverk fรถr automatisering frรฅn bรถrjan till slut
Huvudjobb Startar webblรคsare och rapporterar resultat Ger beskrivning, det och fรถrvรคntan Driver en live-applikation i en riktig webblรคsare
Testnivรฅ Enhet och integrering Enhet och integration ร„nd till รคnde
Behรถver en fungerande server Nej Nej Ja
Instรคllningsfil karma.conf.js Ingen, den lรถper inuti en lรถpare fรถrtractor.conf.js
Nuvarande status Fรถrรฅldrad, endast underhรฅll Aktivt underhรฅllen Pensionerad i augusti 2023

Kort sagt, Jasmine skriver testet, Karma utfรถr det och Protractor utรถkar samma Jasmine-syntax till en fullstรคndigt renderad sida.

Bรคsta praxis fรถr enhetstestning av AngularJS

En liten uppsรคttning vanor hรฅller en AngularJS-svit snabb och pรฅlitlig allt eftersom applikationen vรคxer.

  1. Testa en enhet i taget. Ladda endast modulen som testas inuti beforeEach, och simulera varje samarbetspartner sรฅ att ett fel pekar pรฅ en enda fil.
  2. Ring aldrig en riktig backend. Anvรคnd tjรคnsten $httpBackend frรฅn angular-mocks fรถr att returnera standardsvar. Testerna kรถrs sedan offline och ger identiska resultat pรฅ varje maskin.
  3. Hรฅll specifikationsnamnen beteendemรคssiga. Ett namn som โ€returnerar 5 nรคr styrenheten initierasโ€ lรคses bรคttre i en rapport รคn โ€test1โ€.
  4. Spola alltid igenom digestionscykeln. Anropa $rootScope.$digest() efter att ha รคndrat scopedata, annars uppdateras aldrig bindningar och bevakare och assertions misslyckas av fel anledning.
  5. Mรคt tรคckningen, men bedรถm den noggrant. Lรคgg till karma-tรคckning fรถr att se oprรถvade grenar. Hรถg tรคckning med svaga pรฅstรฅenden dรถljer fortfarande defekter.
  6. Kรถr sviten i kontinuerlig integration. Anvรคnd en headless Chrome launcher sรฅ att samma specifikationer kรถrs pรฅ varje commit istรคllet fรถr bara pรฅ en utvecklardator.

Genom att tillรคmpa dessa regler fรถrvandlas exemplen ovan frรฅn isolerade demonstrationer till ett regressionsskyddsnรคt fรถr en รคldre AngularJS-kodbas. Fรถr en stรถrre bild, se AngularJS-handledning serien.

Vanliga frรฅgor

Modulen som innehรถll den providern laddades inte. Lรคgg till den i beforeEach(module('yourModule')) och bekrรคfta att angular-mocks.js listas i karma.conf.js efter angular.js, annars kan injektorn inte lรถsa beroendet.

Installera karma-chrome-launcher och stรคll in webblรคsarens alternativ till ChromeHeadless i karma.conf.js. Programsviten kรถrs sedan inuti pipelines fรถr kontinuerlig integration och containrar dรคr ingen visningsserver รคr tillgรคnglig.

Ja. AI-kodningsassistenter lรคser en kontroller och utarbetar Jasmine-specifikationer med simulerade omfรฅng och matchare. RevGranska utdata noggrant, eftersom genererade pรฅstรฅenden ofta omformulerar implementeringen istรคllet fรถr att verifiera det avsedda beteendet.

Ja. AI-verktyg รถversรคtter Jasmine-specifikationer till Jest- eller Vitest-syntax och flaggar angular-mocks-anrop som inte har nรฅgon direkt motsvarighet. Manuell verifiering รคr fortfarande avgรถrande, eftersom beroendeinjektionsmรถnster sรคllan konverterar korrekt.

De flesta team siktar pรฅ sjuttio till รฅttio procents tรคckning av kontroller och tjรคnster. Att jaga en hรถgre siffra innebรคr vanligtvis att testa mallar och tredjepartsbibliotek, vilket รถkar underhรฅllskostnaderna utan att upptรคcka verkliga fel.

Sammanfatta detta inlรคgg med: