Jasmine Framework Tutorial: Enhetstestning med exempel

โšก Smart sammanfattning

Jasmine รคr den beteendedrivna JavaSkripttestningssystem som kรถr Node.js-enhetstester utan webblรคsare eller DOM, med hjรคlp av describe-block, specificerar och fรถrvรคntar sig att matchare verifierar att varje exporterad funktion beter sig som dokumenterat.

  • ๐Ÿ”˜ Ramverksroll: Jasmine testar alla JavaSkript utan webblรคsare, DOM eller hjรคlpbibliotek.
  • โ˜‘๏ธ Miljรถinstรคllning: Installera modulen, kรถr jasmine init och inspektera sedan spec/support/jasmine.json.
  • โœ… Specifikationsmรถnster: beskriv namnen pรฅ en svit, den definierar en specifikation, fรถrvรคntar sig att resultatet hรคvdas.
  • ๐Ÿงช Matchare: toBe, toEqual, toContain, toThrow och toHaveBeenCalled tรคcker de flesta pรฅstรฅenden.
  • ๐Ÿ› ๏ธ Modern lรถpare: Det underhรฅllna jasmine-paketet ersรคtter den ounderhรฅllna jasmine-node-modulen.
  • ๐Ÿ“Š Val av ramverk: Jasmine skickar pรฅstรฅenden och spioner, medan Jest lรคgger till parallella kรถrningar och รถgonblicksbilder.

Handledning fรถr Jasmine-ramverket fรถr enhetstestning av Node.js-applikationer

Vad รคr JasmineJS?

Jasmine รคr en รถppen kรคllkod och mest populรคr JavaSkript bibliotek testa ram fรถr att testa nรฅgon form av JavaSkriptapplikation. Jasmine fรถljer Behavior Driven Development (BDD) procedur fรถr att sรคkerstรคlla att varje rad av JavaSkriptsatsen รคr korrekt enhetstestad.

Vad anvรคnds Jasmine Framework till?

Testning รคr en viktig del av alla applikationer. Fรถr Node.js-enhetstestning kallas ramverket Jasmine. I bรถrjan av 2000-talet fanns det ett ramverk fรถr testning. JavaScript applikationer som kallas JsUnit. Later detta ramverk har uppgraderats och รคr nu kรคnt som Jasmine.

Jasmine hjรคlper till att automatisera Enhetstestning, nรฅgot som har blivit en ganska viktig praxis vid utvecklingping och driftsรคtta moderna webbapplikationer.

I den hรคr Jasmine-handledningen kommer du att lรคra dig hur du stรคller in din miljรถ med Jasmine och hur du kรถr Jasmine-tester fรถr din fรถrsta Node.js-applikation.

Jasmine fรถr att testa Node.js-applikationer

Jasmine รคr en Beteendedriven utveckling (BDD) testram fรถr JavaManus. Det gรถr det inte lita pรฅ webblรคsare, DOM eller nรฅgot annat JavaSkriptramverk. Sรฅledes รคr det lรคmpligt fรถr webbplatser, node.js projekt, eller nรฅgonstans dรคr JavaSkriptet kan kรถras. Fรถr att bรถrja anvรคnda Jasmine mรฅste du fรถrst ladda ner och installera de nรถdvรคndiga Jasmine-modulerna.

Hur man stรคller in Jasmine testmiljรถ

I den hรคr handledningen fรถr Jasmine Node.js behรถver du initiera din miljรถ och inspektera Jasmines konfigurationsfil. Stegen nedan visar hur du konfigurerar Jasmine i din miljรถ.

Steg 1) Installera NPM-moduler
Du mรฅste Installera NPM jasmine-modulen fรถr att anvรคnda Jasmine-ramverket inifrรฅn en Node-applikation. Fรถr att installera jasmine-node-modulen, kรถr kommandot nedan.

npm install jasmine-node

Versionsnotering (2026): det historiska kommandot ovan fungerar fortfarande, men jasmin-nod Modulen รคr i underhรฅllslรคge och paketerar Jasmine 1.3, sรฅ behรฅll den endast fรถr รคldre projekt. Nytt Node.js-arbete installerar den underhรฅllna modulen. Jasmine CLI som ett dev-beroende och anropar det via npx:

npm install --save-dev jasmine
npx jasmine init

Jasmin 6.x รคr den nuvarande huvudlinjen och stรถder Node.js 20, 22 och 24, och Node.js 24 รคr den aktiva LTS-utgรฅvan 2026.

Steg 2) Initiera jasminmiljรถn
Initiera projektet โ€“ Genom att gรถra detta skapar Jasmine en spec-katalog och konfigurations-json รฅt dig. Spec-katalogen anvรคnds fรถr att lagra alla dina testfiler. Genom att gรถra detta kommer Jasmine att veta var alla dina tester finns och kan sedan kรถra dem dรคrefter. JSON filen anvรคnds fรถr att lagra specifik konfigurationsinformation om Jasmine.

Fรถr att initiera Jasmine-miljรถn, kรถr kommandot nedan

jasmine init

Steg 3) Inspektera din konfigurationsfil.
Konfigurationsfilen kommer att lagras i spec/support-mappen som jasmine.json. Den hรคr filen rรคknar upp kรคllfilerna och specifikationsfilerna som du vill att Jasmine runner ska inkludera.

Skรคrmdumpen nedan visar ett typiskt exempel pรฅ jasmine.json-filen fรถr Jasmine.

Jasmine-konfigurationsfilen i spec support-mappen som visar spec-katalogen och spec_files

  1. Observera att spec-katalogen anges hรคr. Som nรคmnts tidigare, nรคr jasmine kรถrs, sรถker den efter alla tester i den hรคr katalogen.
  2. Nรคsta sak att notera รคr parametern spec_files โ€“ Detta anger att vilka testfiler som รคn skapas ska lรคggas till med nyckelordet 'spec'.

Konfigurationsanmรคrkning: I Jasmine 6.x accepterar samma fil รคven hjรคlpare, som laddas en gรฅng fรถre varje specifikation, och en env blockhรฅllningsalternativ som slumpmรคssig och stopSpecOnExpectationFailure. Standard globen spec_files รคr **/*[sS]pec.?(m)js, och en annan fil kan skickas med โ€“konfiguration eller JASMINE_CONFIG_PATH variabel.

Nรคsta i den hรคr sjรคlvstudien fรถr Jasmine-ramverket kommer vi att lรคra oss hur man anvรคnder Jasmine fรถr att testa Node.js-applikationer.

Hur man anvรคnder Jasmine fรถr att testa Node.js-applikationer

Fรถr att kunna anvรคnda Jasmine-enhetstestning fรถr Node.js-applikationer mรฅste en rad steg fรถljas.

I vรฅrt exempel nedan ska vi definiera en modul som adderar tvรฅ tal som behรถver testas. Vi definierar sedan en separat kodfil med testkoden och anvรคnder Jasmine fรถr att testa Add-funktionen i enlighet dรคrmed.

Steg 1) Definiera koden som ska testas. Vi kommer att definiera en funktion som lรคgger till 2 tal och returnerar resultatet. Den hรคr koden kommer att skrivas i en fil som heter "Add.js."

Skรคrmdumpen nedan visar den fรคrdiga Add.js-modulen, och samma kod upprepas som text under den.

Add.js-modulen exporterar AddNumber-funktionen som returnerar summan av tvรฅ parametrar

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

Code Fรถrklaring

  1. Nyckelordet "export" anvรคnds fรถr att sรคkerstรคlla att den funktionalitet som definieras i den hรคr filen faktiskt kan nรฅs av andra filer.
  2. Vi definierar sedan en funktion som heter "AddNumber". Denna funktion รคr definierad fรถr att ta 2 parametrar, a och b. Funktionen lรคggs till i modulen "exporterar" fรถr att gรถra funktionen till en publik funktion som kan nรฅs av andra applikationsmoduler.
  3. Vi fรฅr รคntligen vรฅr funktion att returnera parametrarnas mervรคrde.

Steg 2) Nรคsta steg รคr att definiera vรฅr Jasmine-testkod, som kommer att anvรคndas fรถr att testa vรฅr "Add"-funktion i Add.js-filen. Koden nedan mรฅste lรคggas i en fil som heter add-spec.js.

AnmรคrkningarOrdet 'spec' mรฅste lรคggas till i testfilen sรฅ att det kan detekteras av Jasmine.

Skรคrmdumpen nedan visar samma specifikationsfil รถppen i en editor.

add-spec.js-filen med en describe-svit och en it-specifikation som bekrรคftar AddNumber returnerar 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 Fรถrklaring

  1. Vi mรฅste fรถrst inkludera vรฅr Add.js-fil sรฅ att vi kan testa funktionen 'AddNumber' i den hรคr filen.
  2. Vi skapar nu vรฅr testmodul. Den fรถrsta delen av testmodulen รคr att beskriva en metod som i princip ger ett namn fรถr vรฅrt test. I det hรคr fallet รคr namnet pรฅ vรฅrt test "Addition".
  3. Nรคsta bit รคr att ge en beskrivning av vรฅrt test med 'it'-metoden.
  4. Vi anropar nu vรฅr AddNumber-metod och skickar in tvรฅ parametrar, 5 och 6. Detta skickas till vรฅr AddNumber-metod i Add.js-filen. Returvรคrdet lagras sedan i en variabel som heter vรคrde.
  5. Det sista steget รคr att gรถra jรคmfรถrelsen eller vรฅrt faktiska test. Eftersom vi fรถrvรคntar oss att vรคrdet som returneras av AddNumber-funktionen ska vara 11, definierar vi detta med hjรคlp av metoden expect(value).toBe(det fรถrvรคntade vรคrdet).

Produktion

  1. Fรถr att kรถra testet mรฅste man kรถra kommandot jasmine.
  2. Skรคrmdumpen nedan visar att efter att jasmine-kommandot har kรถrts, kommer det att upptรคcka att det finns ett test som heter add-spec.js och kรถra det testet i enlighet dรคrmed. Om det finns nรฅgra fel i testet kommer det att visas i enlighet med detta.

Konsolutdata frรฅn jasmine-kommandot som rapporterar det exekverade add-spec-testet

Exemplet Add anvรคnder en enda matchare, men Jasmine levererar en komplett uppsรคttning av dem. Tabellen nedan listar de som tรคcker nรคstan alla pรฅstรฅenden du kommer att skriva.

Jasmine-tรคndstickor du kommer att anvรคnda mest

En matchare รคr den jรคmfรถrelse som fรถljer expect(). Kedja .not fรถre nรฅgon matchare fรถr att invertera den, som i expect(value).not.toBe(11).

matchare Vad den kontrollerar Typisk anvรคndning
att vara Strikt identitet, samma jรคmfรถrelse som === fรถrvรคnta(vรคrde).attVara(11)
till Lika Djup likhet mellan objekt och arrayer fรถrvรคnta(anvรคndare).tillLika med({id: 1})
att innehรฅlla Medlemskap i en array eller en strรคng fรถrvรคnta(filer).toContain('add-spec.js')
att definieras Vรคrdet รคr inte odefinierat fรถrvรคnta(app.LรคggTillNummer).attBeDefinieras()
att kasta Den inslagna funktionen genererar ett fel fรถrvรคnta(callAdd).toThrow()
att ha blivit uppkallad En spion anropades minst en gรฅng fรถrvรคnta(logger.write).attHaVitsAnropad()

Tvรฅ vanor gรถr fel lรคsbara. Anvรคnd toBe endast fรถr primitiva objekt och identiska referenser, eftersom tvรฅ objekt med samma innehรฅll aldrig รคr ===. Anvรคnd toEqual fรถr strukturer och lรคgg till toHaveBeenCalledWith nรคr argumenten รคr lika viktiga som sjรคlva anropet.

Uppsรคttning, nedmontering och spioner i Jasmine

Riktiga sviter behรถver delat tillstรฅnd och dubbelrum fรถr lรฅngsamma samarbetspartners. Jasmine tillhandahรฅller bรฅda utan nรฅgot extra paket.

  • fรถre varje och efter varje kรถr fรถre och efter varje specifikation inuti ett beskrivningsblock, vilket รคr den naturliga platsen att bygga om fixturer.
  • fรถre allt och efter allt kรถr en gรฅng fรถr hela blocket, sรฅ reservera dem fรถr dyrt arbete som att รถppna en anslutning.
  • spyOn(objekt, 'metod') ersรคtter en verklig metod med en tracking double; lรคgg till .and.returnValue() fรถr att kontrollera vad den svarar pรฅ.
  • jasmine.createSpy('namn') bygger en fristรฅende dubbel fรถr en รฅteranrop som inte har nรฅgot objekt att koppla till.
  • Asynkrona specifikationer kan deklareras asynkron och avvaktas, kan returnera ett lรถfte eller kan acceptera ett klart รฅteranrop som mรฅste anropas exakt en gรฅng.

Spioner รฅterstรคlls mellan specifikationer, sรฅ en svit lรคcker aldrig en stubbad metod till nรคsta test. Den isoleringen รคr det som gรถr att en misslyckad specifikation pekar pรฅ en defekt istรคllet fรถr en kedja av dem, vilket รคr samma disciplin som beskrivs i enhetstestning grunderna.

Jasmine vs Mocha vs Jest

Jasmine รคr ett av tre ramverk som dominerar JavaSkripttestning, och valet handlar oftast om hur mycket kablage du vill รคga.

Aspect Jasmin Mocka det finns
Pรฅstรฅenden Inbyggd Tillsatt, vanligtvis Chai Inbyggd
Spioner och hรฅnare Inbyggd Tillagd, vanligtvis Sinon Inbyggd
Utfรถrande Serial Serial Parallellt รถver processer
snapshots Nej Nej Ja
Gemensamt hem Angular, enkel Node.js Flexibla Node.js-stackar React och moderna bundlers

Pick Mocka nรคr du vill sรคtta ihop din egen pรฅstรฅende- och hรฅnstack, och det finns Nรคr parallella kรถrningar, tรคckning och รถgonblicksbilder รคr viktigare รคn konfigurationskontroll. Jasmine รคr fortfarande det lรคttaste alternativet som fortfarande levereras komplett, vilket รคr anledningen till att det fortfarande รคr vanligt fรถrekommande i automatiseringstestning sviter.

Vanliga frรฅgor

Jasmine lรคser spec_dir som ett prefix, sedan varje glob som listas i spec_files, sรฅ endast matchande filer kรถrs. Sรถkvรคgar som bรถrjar med ett utropstecken exkluderas, och hjรคlpfiler laddas en gรฅng fรถre specs fรถr att registrera delad installation.

Deklarera specifikationen async och vรคnta pรฅ anropet, returnera ett lรถfte eller acceptera ett slutfรถrt รฅteranrop. asynkron guide varnar fรถr att done mรฅste utlรถsas exakt en gรฅng, annars landar fel pรฅ fel specifikation.

Skicka en sรถkvรคg eller glob efter lรถparen, till exempel npx jasmine spec/appSpec.js. Flaggan โ€“filter accepterar ett mรถnster som matchar namnet describe, vilket hรฅller feedbacken snabb medan du arbetar pรฅ en enskild svit.

Ocuco-landskapet jasmin-nod Paketet รคr i underhรฅllslรคge, innehรฅller fortfarande Jasmine 1.3 och listar Node.js 10 och 12 som aktuella. Det officiella Jasmine-paketet tracks ramverket och stรถdde Node.js-utgรฅvor istรคllet.

Om du sรคtter prefixet x till en specifikation, som i xit eller xdescribe, rapporterar Jasmine den som vรคntande. Om du sรคtter prefixet f till den, som i fit eller fdescribe, kรถrs endast de fokuserade specifikationerna. Ta bort bรฅda prefixen innan du genomfรถr kommandot.

AI-assistenter beskriver block, matchningar och edge-fall frรฅn en befintlig modul pรฅ nรฅgra sekunder, och de flaggar sviter som misslyckas intermittent. Varje genererad specifikation behรถver fortfarande granskas, eftersom ett sรคkert pรฅstรฅende om felaktigt beteende dรถljer defekten.

GitHub Copilot kompletterar specifikationstexter medan du skriver och dess agentlรคge kan รถppna en pull request som reparerar trasiga specifikationer efter en omstrukturering. Behandla skillnaden som ett fรถrslag och kรถr sviten sjรคlv.

Angular stillbilder anvรคnder Jasmine-specifikationer, och Protractor anvรคnde Jasmine som standardramverk innan det arkiverades. Team parar nu ihop Jasmine med Karma fรถr webblรคsare, eller flyttar webblรคsarflรถden till Cypress och dramatiker.

Sammanfatta detta inlรคgg med: