Jasmine Framework-zelfstudie: testen van eenheden met voorbeeld

⚡ Slimme samenvatting

Jasmine is de gedragsgestuurde JavaEen framework voor het testen van scripts dat Node.js-unit tests uitvoert zonder browser of DOM. Het maakt gebruik van describe-blokken, specs en expect-matchers om te verifiëren dat elke geëxporteerde functie zich gedraagt ​​zoals gedocumenteerd.

  • 🔘 Rol van het framework: Jasmine test alles JavaScript zonder browsers, DOM of hulpbibliotheken.
  • ☑️ Omgevingsinstellingen: Installeer de module, voer `jasmine init` uit en bekijk vervolgens het bestand `spec/support/jasmine.json`.
  • ✅ Specificatiepatroon: 'Describe' benoemt een suite, 'define' definieert een specificatie, 'expect' controleert het resultaat.
  • 🧪 Matchmakers: De begrippen 'toBe', 'toEqual', 'toContain', 'toThrow' en 'toHaveBeenCalled' dekken de meeste beweringen.
  • ️ Moderne hardloper: Het bijgewerkte jasmine-pakket vervangt de niet langer bijgewerkte jasmine-node-module.
  • 📊 Keuze van het framework: Jasmine verzendt beweringen en spionnen, terwijl Jest parallelle uitvoeringen en momentopnamen toevoegt.

Handleiding voor het testen van Node.js-applicaties met behulp van het Jasmine-framework

Wat is JasmijnJS?

Jasmine is open-source en het populairst JavaScriptbibliotheek-testframework om elk type te testen JavaScripttoepassing. Jasmine volgt de Behavior Driven Development (BDD)-procedure om ervoor te zorgen dat elke regel van JavaScriptinstructie is correct getest.

Waar wordt het Jasmine Framework voor gebruikt?

Testen is een essentieel onderdeel van elke applicatie. Voor unit-testen in Node.js is Jasmine het beschikbare framework. Begin jaren 2000 bestond er al een framework voor testen. JavaScript toepassingen genaamd JsUnit. Later Dit framework is geüpgraded en staat nu bekend als Jasmine.

Jasmine helpt bij het automatiseren Testen van een eenheidiets wat een belangrijke praktijk is geworden bij de ontwikkeling vanping en het implementeren van moderne webapplicaties.

In deze Jasmine-tutorial leert u hoe u uw omgeving kunt instellen met Jasmine en hoe u Jasmine-tests kunt uitvoeren voor uw eerste Node.js-toepassing.

Jasmine voor het testen van Node.js-applicaties

Jasmine is een Gedragsgestuurde ontwikkeling (BDD) toetsingskader voor JavaScript. Het doet niet vertrouw op browsers, DOM of wat dan ook JavaScriptframework. Daardoor is het geschikt voor websites. Node.js projecten, of waar dan ook dat JavaScript kan worden uitgevoerd. Om Jasmine te kunnen gebruiken, moet u eerst de benodigde Jasmine-modules downloaden en installeren.

Hoe u de Jasmine-testomgeving instelt

In deze Jasmine Node.js-tutorial moet je vervolgens je omgeving initialiseren en het Jasmine-configuratiebestand bekijken. De onderstaande stappen laten zien hoe je Jasmine in je omgeving instelt.

Stap 1) Installeer NPM-modules
Je moet NPM installeren De Jasmine-module maakt het mogelijk om het Jasmine-framework vanuit een Node-applicatie te gebruiken. Om de jasmine-node-module te installeren, voert u de onderstaande opdracht uit.

npm install jasmine-node

Versie-opmerking (2026): Het bovenstaande historische commando werkt nog steeds, maar de jasmijn-node Deze module bevindt zich in de onderhoudsmodus en bevat Jasmine 1.3, dus gebruik hem alleen voor oudere projecten. Nieuwe Node.js-projecten installeren de onderhouden versie. Jasmine CLI als ontwikkelafhankelijkheid en roept deze aan via npx:

npm install --save-dev jasmine
npx jasmine init

Jasmine 6.x is de huidige hoofdlijn en ondersteunt Node.js 20, 22 en 24, waarbij Node.js 24 de actieve LTS-release is in 2026.

Stap 2) Initialiseer de Jasmine-omgeving
Het project initialiseren – Hiermee maakt Jasmine een `spec`-directory en een `configuration.json`-bestand voor je aan. De `spec`-directory wordt gebruikt om al je testbestanden op te slaan. Zo weet Jasmine waar al je tests zich bevinden en kan ze dienovereenkomstig uitvoeren. JSON Dit bestand wordt gebruikt om specifieke configuratiegegevens over Jasmine op te slaan.

Om de Jasmine-omgeving te initialiseren, voert u de onderstaande opdracht uit.

jasmine init

Stap 3) Inspecteer uw configuratiebestand.
Het configuratiebestand wordt opgeslagen in de map spec/support als jasmine.json. Dit bestand somt de bronbestanden en spec-bestanden op die u in de Jasmine Runner wilt opnemen.

Onderstaande schermafbeelding toont een typisch voorbeeld van het jasmine.json-bestand voor Jasmine.

Het Jasmine-configuratiebestand in de map 'spec support' toont de map 'spec' en de bestanden 'spec_files'.

  1. Merk op dat de spec-directory hier wordt gespecificeerd. Zoals eerder opgemerkt, zoekt jasmine wanneer het wordt uitgevoerd naar alle tests in deze map.
  2. Het volgende dat u moet opmerken is de parameter spec_files. Deze geeft aan dat welke testbestanden ook worden gemaakt, deze moeten worden toegevoegd aan het trefwoord 'spec'.

Configuratie-opmerking: In Jasmine 6.x accepteert hetzelfde bestand ook helpers, die eenmaal geladen worden vóór elke specificatie, en een env blok met opties zoals random en stopSpecOnExpectationFailure. De standaard spec_files glob is **/*[sS]pec.?(m)jsen er kan een ander bestand worden doorgegeven met –config of de JASMINE_CONFIG_PAD variabel.

Vervolgens leren we in deze Jasmine-framework-tutorial hoe we Jasmine kunnen gebruiken om Node.js-applicaties te testen.

Jasmine gebruiken om Node.js-applicaties te testen

Om Jasmine-eenheidstests voor Node.js-applicaties te gebruiken, moet een reeks stappen worden gevolgd.

In ons onderstaande voorbeeld definiëren we een module die twee getallen optelt en die we moeten testen. We maken vervolgens een apart codebestand met de testcode en gebruiken Jasmine om de optelfunctie te testen.

Stap 1) Definieer de code die getest moet worden. We gaan een functie definiëren die 2 getallen optelt en het resultaat retourneert. Deze code wordt geschreven in een bestand genaamd “Add.js.”

De onderstaande schermafbeelding toont de voltooide Add.js-module, met dezelfde code eronder als tekst.

De Add.js-module exporteert de AddNumber-functie, die de som van twee parameters retourneert.

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

Code Uitleg

  1. Het trefwoord “exports” wordt gebruikt om ervoor te zorgen dat de functionaliteit die in dit bestand is gedefinieerd ook daadwerkelijk toegankelijk is voor andere bestanden.
  2. Vervolgens definiëren we een functie met de naam 'AddNumber'. Deze functie is gedefinieerd om twee parameters te nemen, a en b. De functie is toegevoegd aan de module “exports” om de functie een publieke functie te maken die toegankelijk is voor andere applicatiemodules.
  3. We zorgen er eindelijk voor dat onze functie de toegevoegde waarde van de parameters retourneert.

Stap 2) Vervolgens moeten we onze Jasmine-testcode definiëren, die we zullen gebruiken om onze "Add"-functie in het bestand Add.js te testen. De onderstaande code moet in een bestand met de naam worden geplaatst. add-spec.js.

NoteHet woord 'spec' moet aan het testbestand worden toegevoegd, zodat Jasmine het kan herkennen.

De onderstaande schermafbeelding toont hetzelfde specificatiebestand geopend in een editor.

Het add-spec.js-bestand met een describe suite en een it spec die beweert dat AddNumber 11 retourneert.

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 Uitleg

  1. We moeten eerst ons Add.js-bestand opnemen, zodat we de functie 'AddNumber' in dit bestand kunnen testen.
  2. We zijn nu onze testmodule aan het maken. Het eerste deel van de testmodule is het beschrijven van een methode die in feite een naam geeft voor onze test. In dit geval is de naam van onze test “Toevoeging”.
  3. Het volgende deel is het geven van een beschrijving voor onze test met behulp van de 'it'-methode.
  4. We roepen nu onze AddNumber-methode aan en geven twee parameters mee: 5 en 6. Deze worden doorgegeven aan onze AddNumber-methode in het Add.js-bestand. De retourwaarde wordt vervolgens opgeslagen in een variabele genaamd value.
  5. De laatste stap is het uitvoeren van de vergelijking, oftewel onze eigenlijke test. Omdat we verwachten dat de waarde die de functie AddNumber retourneert 11 is, definiëren we dit met behulp van de methode expect(waarde).toBe(de verwachte waarde).

uitgang

  1. Om de test uit te voeren, moet je het commando jasmijn uitvoeren.
  2. De onderstaande schermafbeelding laat zien dat Jasmine na het uitvoeren van de opdracht detecteert dat er een test met de naam `add-spec.js` bestaat en deze test vervolgens uitvoert. Eventuele fouten in de test worden weergegeven.

Console-uitvoer van het Jasmine-commando dat de uitgevoerde add-spec-test rapporteert.

Het voorbeeld 'Toevoegen' gebruikt slechts één matcher, maar Jasmine levert een complete set matchers mee. De onderstaande tabel geeft een overzicht van de matchers die vrijwel elke bewering dekken die u zult schrijven.

Jasmijnlucifers die je het meest zult gebruiken

Een matcher is de vergelijking die volgt op expect(). Plaats .not vóór elke matcher om deze om te keren, zoals in expect(value).not.toBe(11).

matchers Wat het controleert Typisch gebruik
zijn Strikte identiteit, dezelfde vergelijking als === verwacht(waarde).teZijn(11)
gelijk maken Diepgaande gelijkheid van objecten en arrays expect(user).toEqual({id: 1})
bevatten Lidmaatschap binnen een array of een tekenreeks expect(files).toContain('add-spec.js')
nog te definiëren De waarde is niet ongedefinieerd. expect(app.AddNumber).toBeDefined()
gooien De ingekapselde functie geeft een foutmelding. expect(callAdd).toThrow()
genoemd worden Er werd minstens één keer een spion ingeschakeld. expect(logger.write).toHaveBeenCalled()

Twee gewoontes zorgen ervoor dat foutmeldingen leesbaar blijven. Gebruik `toBe` alleen voor primitieve gegevenstypen en identieke referenties, omdat twee objecten met dezelfde inhoud nooit gelijk zijn aan elkaar (===). Gebruik `toEqual` voor structuren en voeg `toHaveBeenCalledWith` toe wanneer de argumenten net zo belangrijk zijn als de aanroep zelf.

Opzetten, afbreken en spionnen in Jasmine

Echte suites vereisen een gedeelde status en dubbele resources voor trage samenwerking. Jasmine biedt beide zonder extra pakket.

  • voorElk en naElk Voer de code uit vóór en na elke specificatie binnen een beschrijvingsblok, wat de natuurlijke plek is om armaturen opnieuw op te bouwen.
  • voor alles en na alles Voer de test één keer uit voor het hele blok, dus bewaar ze voor kostbare werkzaamheden zoals het openen van een aansluiting.
  • spyOn(object, 'methode') vervangt een echte methode door een tracking double; voeg .and.returnValue() toe om te bepalen wat het antwoord is.
  • jasmine.createSpy('name') Bouwt een zelfstandig double-object voor een callback die geen object heeft om aan te koppelen.
  • Asynchrone specificaties kan asynchroon en met await worden gedeclareerd, kan een promise retourneren of kan een done-callback accepteren die precies één keer moet worden aangeroepen.

Spies worden tussen de tests gereset, zodat een testsuite nooit een gesimuleerde methode doorgeeft aan de volgende test. Die isolatie zorgt ervoor dat een falende specificatie wijst op één defect in plaats van een reeks defecten, wat overeenkomt met de discipline die wordt beschreven in de testen van een eenheid grondbeginselen.

Jasmine vs Mocha vs Jest

Jasmine is een van de drie frameworks die dominant zijn. JavaBij het testen van scripts komt de keuze meestal neer op hoeveel bedrading je wilt hebben.

Aspect Jasmijn Mocha er is
Beweringen Gebouwd in Toegevoegd, meestal Chai Gebouwd in
Spionnen en spotters Gebouwd in Toegevoegd, meestal Sinon Gebouwd in
Uitvoering Serie- Serie- Parallelle processen
Snapshots Nee Nee Ja
Gemeenschappelijk huis Angular, pure Node.js Flexibele Node.js-stacks React en moderne bundlers

Pick Mocha wanneer je je eigen assertie- en mocking-stack wilt samenstellen, en er is Bij parallelle uitvoeringen zijn de dekking en momentopnamen belangrijker dan configuratiebeheer. Jasmine blijft de lichtste optie die toch compleet geleverd wordt, en daarom wordt het nog steeds veel gebruikt. automatisering testen vervolg.

Veelgestelde vragen

Jasmine leest spec_dir als een voorvoegsel, en vervolgens elke glob die in spec_files staat vermeld, zodat alleen overeenkomende bestanden worden uitgevoerd. Paden die beginnen met een uitroepteken worden uitgesloten, en helpers worden eenmaal geladen vóór de specificaties om de gedeelde configuratie te registreren.

Declareer de specificatie als asynchroon en wacht op de aanroep, retourneer een promise of accepteer een done-callback. asynchrone handleiding waarschuwt dat de functie precies één keer moet worden uitgevoerd, anders komen fouten op de verkeerde specificatie terecht.

Geef een pad of glob door na de runner, bijvoorbeeld npx jasmine spec/appSpec.js. De vlag –filter accepteert een patroon dat overeenkomt met de beschrijvingsnaam, waardoor de feedback snel blijft terwijl je aan één suite werkt.

De jasmijn-node Het pakket bevindt zich in de onderhoudsmodus, bevat nog steeds Jasmine 1.3 en vermeldt Node.js 10 en 12 als de huidige versies. Het officiële Jasmine-pakket tracks het framework en ondersteunde Node.js-releases in plaats daarvan.

Voeg een 'x' toe aan een specificatie, zoals in xit of xdescribe, en Jasmine meldt deze als 'in behandeling'. Voeg een 'f' toe aan de specificatie, zoals in fit of fdescribe, en alleen de geselecteerde specificaties worden uitgevoerd. Verwijder beide voorvoegsels voordat je de wijzigingen doorvoert.

AI-assistenten stellen binnen enkele seconden beschrijvingsblokken, matchers en randgevallen op basis van een bestaande module op en signaleren testsuites die af en toe falen. Elke gegenereerde specificatie moet echter nog steeds worden beoordeeld, omdat een stellige bewering over onjuist gedrag het defect kan verbergen.

GitHub-copiloot Het vult de specificaties aan terwijl je typt en de agentmodus kan een pull request openen om defecte specificaties te herstellen na een refactoring. Beschouw de diff als een voorstel en voer de suite zelf uit.

Angular gebruikt nog steeds Jasmine-specificaties als basisstructuur, en Protractor Jasmine werd gebruikt als standaard framework voordat het werd gearchiveerd. Teams combineren Jasmine nu met Karma voor browsers, of verplaatsen browserworkflows naar Cypress en toneelschrijver.

Vat dit bericht samen met: