Jasmine Framework Tutorial: Enhetstesting med eksempel

โšก Smart oppsummering

Jasmine er den atferdsdrevne JavaSkripttestingsrammeverk som kjรธrer Node.js-enhetstester uten nettleser eller DOM, ved hjelp av beskrivelsesblokker, spesifiserer og forventer at matchere bekrefter at alle eksporterte funksjoner oppfรธrer seg som dokumentert.

  • ๐Ÿ”˜ Rammeverksrolle: Jasmine tester hva som helst JavaSkript uten nettlesere, DOM eller hjelpebiblioteker.
  • โ˜‘๏ธ Miljรธoppsett: Installer modulen, kjรธr jasmine init, og sjekk deretter spec/support/jasmine.json.
  • โœ… Spesifikasjonsmรธnster: beskriv navnene pรฅ en suite, den definerer en spesifikasjon, forvent at resultatet hevdes.
  • ๐Ÿงช Matchere: ยซtoBeยป, ยซtoEqualยป, ยซtoContainยป, ยซtoThrowยป og ยซtoHaveBeenCalledยป dekker de fleste pรฅstandene.
  • ๐Ÿ› ๏ธ Moderne lรธper: Den vedlikeholdte jasmine-pakken erstatter den ikke-vedlikeholdte jasmine-node-modulen.
  • ๐Ÿ“Š Valg av rammeverk: Jasmine sender pรฅstander og spioner, mens Jest legger til parallelle lรธp og รธyeblikksbilder.

Jasmine-rammeverksveiledning for enhetstesting av Node.js-applikasjoner

Hva er JasmineJS?

Jasmine er en รฅpen kildekode og mest populรฆr JavaSkriptbibliotek testramme for รฅ teste alle slags JavaSkriptapplikasjon. Jasmine fรธlger Behavior Driven Development (BDD) prosedyre for รฅ sikre at hver linje av JavaSkriptsetningen er skikkelig enhetstestet.

Hva brukes Jasmine Framework til?

Testing er et nรธkkelelement i enhver applikasjon. For Node.js-enhetstesting kalles rammeverket som er tilgjengelig for testing Jasmine. Tidlig i 2000 fantes det et rammeverk for testing JavaScript applikasjoner kalt JsUnit. Later dette rammeverket ble oppgradert og er nรฅ kjent som Jasmine.

Jasmine hjelper i automatisert Enhetstesting, noe som har blitt en ganske sentral praksis nรฅr man utviklerping og distribusjon av moderne webapplikasjoner.

I denne Jasmine-opplรฆringen lรฆrer du hvordan du setter opp miljรธet ditt med Jasmine og hvordan du kjรธrer Jasmine-tester for din fรธrste Node.js-applikasjon.

Jasmine for testing av Node.js-applikasjoner

Jasmine er en Atferdsdrevet utvikling (BDD) testramme for JavaManus. Det gjรธr det ikke stole pรฅ nettlesere, DOM eller andre JavaSkriptrammeverk. Dermed er det egnet for nettsteder, node.js prosjekter, eller hvor som helst som JavaSkriptet kan kjรธres. For รฅ begynne รฅ bruke Jasmine, mรฅ du fรธrst laste ned og installere de nรธdvendige Jasmine-modulene.

Hvordan sette opp Jasmine testmiljรธ

I denne Jasmine Node.js-opplรฆringen mรฅ du initialisere miljรธet ditt og inspisere Jasmine-konfigurasjonsfilen. Trinnene nedenfor viser hvordan du konfigurerer Jasmine i miljรธet ditt.

Trinn 1) Installer NPM-moduler
Du mรฅ Installer NPM jasmine-modulen for รฅ bruke Jasmine-rammeverket fra et Node-program. For รฅ installere jasmine-node-modulen, kjรธr kommandoen nedenfor.

npm install jasmine-node

Versjonsnotat (2026): den historiske kommandoen ovenfor fungerer fortsatt, men jasmin-node Modulen er i vedlikeholdsmodus og inkluderer Jasmine 1.3, sรฅ behold den kun for eldre prosjekter. Nytt Node.js-arbeid installerer den vedlikeholdte Jasmine CLI som en utvikleravhengighet og kaller den gjennom npx:

npm install --save-dev jasmine
npx jasmine init

Jasmin 6.x er den nรฅvรฆrende hovedlinjen og stรธtter Node.js 20, 22 og 24, og Node.js 24 er den aktive LTS-utgivelsen i 2026.

Trinn 2) Initialiser Jasmine-miljรธet
Initialisering av prosjektet โ€“ Ved รฅ gjรธre dette oppretter Jasmine en spec-katalog og konfigurasjons-json for deg. Spec-katalogen brukes til รฅ lagre alle testfilene dine. Ved รฅ gjรธre dette vil Jasmine vite hvor alle testene dine er, og kan deretter kjรธre dem deretter. JSON Filen brukes til รฅ lagre spesifikk konfigurasjonsinformasjon om Jasmine.

For รฅ initialisere Jasmine-miljรธet, kjรธr kommandoen nedenfor

jasmine init

Trinn 3) Inspiser konfigurasjonsfilen din.
Konfigurasjonsfilen vil bli lagret i spec/support-mappen som jasmine.json. Denne filen oppregner kildefilene og spesifikasjonsfilene du vil at Jasmine-lรธperen skal inkludere.

Skjermbildet nedenfor viser et typisk eksempel pรฅ jasmine.json-filen for Jasmine.

Jasmine-konfigurasjonsfilen i spesifikasjonsstรธttemappen som viser spesifikasjonskatalogen og spesifikasjonsfilene

  1. Merk at spesifikasjonskatalogen er spesifisert her. Som nevnt tidligere, nรฅr jasmine kjรธrer, sรธker den etter alle testene i denne katalogen.
  2. Den neste tingen รฅ merke seg er spec_files-parameteren โ€“ Dette angir at uansett hvilke testfiler som opprettes, skal de legges til med nรธkkelordet 'spec'.

Konfigurasjonsmerknad: I Jasmine 6.x godtar den samme filen ogsรฅ hjelpere, som lastes inn รฉn gang fรธr hver spesifikasjon, og en env blokkholdingsalternativer som tilfeldig og stopSpecOnExpectationFailure. Standard spec_files glob er **/*[sS]pec.?(m)js, og en annen fil kan sendes med โ€“konfigurasjon eller JASMINE_CONFIG_PATH variabel.

Neste i denne Jasmine-rammeveiledningen vil vi lรฆre hvordan du bruker Jasmine til รฅ teste Node.js-applikasjoner.

Hvordan bruke Jasmine til รฅ teste Node.js-applikasjoner

For รฅ bruke Jasmine-enhetstesting for Node.js-applikasjoner, mรฅ en rekke trinn fรธlges.

I eksemplet nedenfor skal vi definere en modul som legger sammen to tall som mรฅ testes. Deretter definerer vi en separat kodefil med testkoden og bruker Jasmine til รฅ teste Add-funksjonen deretter.

Trinn 1) Definer koden som skal testes. Vi skal definere en funksjon som legger til 2 tall og returnerer resultatet. Denne koden skal skrives i en fil som heter "Add.js."

Skjermbildet nedenfor viser den ferdige Add.js-modulen, og den samme koden gjentas som tekst under den.

Add.js-modulen eksporterer AddNumber-funksjonen som returnerer summen av to parametere

var exports=module.exports={};
exports.AddNumber=function(a,b)
{
return a+b;
};

Code Forklaring

  1. Nรธkkelordet "eksporter" brukes for รฅ sikre at funksjonaliteten som er definert i denne filen faktisk kan nรฅs av andre filer.
  2. Vi definerer da en funksjon kalt "AddNumber". Denne funksjonen er definert til รฅ ta 2 parametere, a og b. Funksjonen legges til modulen "eksporterer" for รฅ gjรธre funksjonen til en offentlig funksjon som kan nรฅs av andre applikasjonsmoduler.
  3. Vi fรฅr endelig funksjonen vรฅr til รฅ returnere tilleggsverdien til parameterne.

Trinn 2) Deretter mรฅ vi definere Jasmine-testkoden vรฅr, som skal brukes til รฅ teste ยซAddยป-funksjonen vรฅr i Add.js-filen. Koden nedenfor mรฅ legges i en fil som heter add-spec.js.

MerknaderOrdet ยซspecยป mรฅ legges til i testfilen slik at det kan oppdages av Jasmine.

Skjermbildet nedenfor viser den samme spesifikasjonsfilen รฅpen i et redigeringsprogram.

add-spec.js-filen med en describe-suite og en it-spec som hevder at AddNumber returnerer 11

var app=require("../Add.js");
describe("Addition",function(){
it("The function should add 2 numbers",function() {
var value=app.AddNumber(5,6);
expect(value).toBe(11);
});
});

Code Forklaring

  1. Vi mรฅ fรธrst inkludere Add.js-filen vรฅr slik at vi kan teste 'AddNumber'-funksjonen i denne filen.
  2. Vi lager nรฅ vรฅr testmodul. Den fรธrste delen av testmodulen er รฅ beskrive en metode som i utgangspunktet gir et navn til testen vรฅr. I dette tilfellet er navnet pรฅ testen vรฅr "Addition".
  3. Den neste biten er รฅ gi en beskrivelse for testen vรฅr ved รฅ bruke 'it'-metoden.
  4. Vi kaller nรฅ AddNumber-metoden vรฅr og sender inn to parametere, 5 og 6. Dette sendes til AddNumber-metoden vรฅr i Add.js-filen. Returverdien lagres deretter i en variabel kalt verdi.
  5. Det siste trinnet er รฅ gjรธre sammenligningen eller vรฅr faktiske test. Siden vi forventer at verdien som returneres av AddNumber-funksjonen skal vรฆre 11, definerer vi dette ved hjelp av metoden expect(value).toBe(den forventede verdien).

Produksjon

  1. For รฅ kjรธre testen, mรฅ man kjรธre kommandoen jasmine.
  2. Skjermbildet nedenfor viser at etter at jasmine-kommandoen er kjรธrt, vil den oppdage at det finnes en test kalt add-spec.js og utfรธre testen deretter. Hvis det er noen feil i testen, vil det vises deretter.

Konsollutdata fra jasmine-kommandoen som rapporterer den utfรธrte add-spec-testen

Eksemplet ยซAddยป bruker รฉn matcher, men Jasmine sender et komplett sett med dem. Tabellen nedenfor viser de som dekker nesten alle pรฅstander du skriver.

Jasmin-matchere du vil bruke mest

En matcher er sammenligningen som fรธlger expect(). Kjede .not fรธr noen matcher for รฅ invertere den, som i expect(value).not.toBe(11).

matchere Hva den sjekker Typisk bruk
รฅ vรฆre Streng identitet, samme sammenligning som === forvent(verdi).รฅVรฆre(11)
til lik Dyp likhet mellom objekter og matriser forventer(bruker).tillik({id: 1})
รฅ inneholde Medlemskap i en matrise eller en streng forventer(filer).toContain('add-spec.js')
skal defineres Verdien er ikke udefinert expect(app.AddNumber).toBeDefined()
รฅ kaste Den innpakkede funksjonen genererer en feil forventer(callAdd).toThrow()
รฅ ha blitt kalt En spion ble pรฅkalt minst รฉn gang forventer(logger.skrive).รฅHaBlittKallet()

To vaner holder feil lesbare. Bruk toBe kun for primitiver og identiske referanser, fordi to objekter med samme innhold aldri er ===. Bruk toEqual for strukturer, og legg til toHaveBeenCalledWith nรฅr argumentene er like viktige som selve kallet.

Oppsett, demontering og spioner i Jasmine

Ekte suiter trenger delt tilstand og dobler for trege samarbeidspartnere. Jasmine leverer begge uten ekstra pakker.

  • fรธrHver og etterHver kjรธr fรธr og etter hver spesifikasjon inne i en beskrivelsesblokk, som er det naturlige stedet รฅ gjenoppbygge inventar.
  • fรธr alt og etter alt kjรธr รฉn gang for hele blokken, sรฅ reserver dem for dyrt arbeid som รฅ รฅpne en forbindelse.
  • spyOn(objekt, 'metode') erstatter en reell metode med en tracking double; legg til .and.returnValue() for รฅ kontrollere hva den svarer.
  • jasmin.createSpy('navn') bygger en frittstรฅende double for en tilbakeringing som ikke har noe objekt รฅ knytte seg til.
  • Asynkrone spesifikasjoner kan deklareres asynkron og avventes, kan returnere et lรธfte, eller kan akseptere et ferdig tilbakering som mรฅ kalles nรธyaktig รฉn gang.

Spioner tilbakestilles mellom spesifikasjoner, slik at en suite aldri lekker en stubbet metode inn i neste test. Denne isolasjonen er det som gjรธr at en mislykket spesifikasjon peker pรฅ รฉn feil i stedet for en kjede av dem, som er den samme disiplinen beskrevet i enhetstesting grunnleggende.

Jasmine vs Mocha vs Jest

Jasmine er et av tre rammeverk som dominerer JavaSkripttesting, og valget kommer vanligvis ned til hvor mye kabling du vil eie.

Aspekt Jasmine Mocha det er
Pรฅstander Bygget i Tilsatt, vanligvis Chai Bygget i
Spioner og spottere Bygget i Lagt til, vanligvis Sinon Bygget i
Gjennomfรธring Serial Serial Parallelt pรฅ tvers av prosesser
snapshots Nei Nei Ja
Felles hjem Angular, enkel Node.js Fleksible Node.js-stabler React og moderne pakkere

Pick Mocha nรฅr du vil sette sammen din egen pรฅstands- og hรฅnstabel, og det er Nรฅr parallelle kjรธringer, dekning og รธyeblikksbilder er viktigere enn konfigurasjonskontroll, er Jasmine fortsatt det letteste alternativet som fortsatt leveres komplett, og det er derfor det fortsatt er vanlig i automatiseringstesting suiter.

Spรธrsmรฅl og svar

Jasmine leser spec_dir som et prefiks, deretter hver glob som er oppfรธrt i spec_files, slik at bare samsvarende filer kjรธrer. Stier som begynner med et utropstegn ekskluderes, og hjelpere lastes inn รฉn gang fรธr specs for รฅ registrere delt oppsett.

Deklarer spesifikasjonen asynkron og vent pรฅ kallet, returner et lรธfte eller godta et ferdig tilbakering. asynkron guide advarer om at done mรฅ utlรธses nรธyaktig รฉn gang, ellers lander feil pรฅ feil spesifikasjon.

Fรธr en bane eller glob etter lรธperen, for eksempel npx jasmine spec/appSpec.js. โ€“filter-flagget godtar et mรธnster som samsvarer med describe-navnet, noe som holder tilbakemeldingen rask mens du jobber med en enkelt suite.

Ocuco jasmin-node Pakken er i vedlikeholdsmodus, inneholder fortsatt Jasmine 1.3, og viser Node.js 10 og 12 som oppdaterte. Den offisielle Jasmine-pakken tracks rammeverket og stรธttet Node.js-utgivelser i stedet.

Sett prefikset x for en spesifikasjon, som i xit eller xdescribe, og Jasmine rapporterer den som ventende. Sett prefikset f for den, som i fit eller fdescribe, og bare de fokuserte spesifikasjonene kjรธrer. Fjern begge prefiksene fรธr du fullfรธrer.

AI-assistenter utarbeider utkast til beskrivelser av blokker, matchere og kanttilfeller fra en eksisterende modul pรฅ sekunder, og de flagger pakker som feiler av og til. Hver genererte spesifikasjon trenger fortsatt gjennomgang, fordi en sikker pรฅstand om feil oppfรธrsel skjuler feilen.

GitHub Copilot fullfรธrer spesifikasjonstekstene mens du skriver, og agentmodusen kan รฅpne en pull-forespรธrsel som reparerer รธdelagte spesifikasjoner etter en refaktorering. Behandle diff-en som et forslag og kjรธr pakken selv.

Angular still stillaser Jasmine-spesifikasjoner, og Protractor brukte Jasmine som standardrammeverk fรธr det ble arkivert. Team kobler nรฅ Jasmine med Karma for nettlesere, eller flytter nettleserflyter til Cypress og dramatiker.

Oppsummer dette innlegget med: