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: