Mockning och testdubbletter i Node.js
Lär dig isolera koden som testas genom att ersätta riktiga beroenden med mocks, stubs och spies så att dina enhetstester förblir snabba och deterministiska.
Mockning och testdubbletter i Node.js är en gratis lektion i Bootcamp i backendutveckling med Node.js på CoddyKit. Detta är lektion 4 av 4. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för Bootcamp i backendutveckling med Node.js, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Bootcamp i backendutveckling med Node.js innehåller totalt 4 lektioner.
Problemet med riktiga beroenden
Ett enhetstest bör kontrollera en del av logiken isolerat. Men riktig kod anropar databaser, API:er, klockan och filsystemet – allt sådant är långsamt, instabilt och oförutsägbart.
Test doubles ersätter dessa beroenden med kontrollerbara testversioner.
Typer av test doubles
Vanliga termer som du kommer att höra:
- Stub: returnerar ett förutbestämt värde
- Spy: registrerar hur den anropades
- Mock: en stub + spy med inbyggda förväntningar
- Fake: en lättviktig fungerande implementation
Skapa en mock-funktion
I Jest skapar jest.fn() en mock-funktion. Den registrerar varje anrop och låter dig göra påståenden om dem senare.
const callback = jest.fn();
callback('hello');
expect(callback).toHaveBeenCalledWith('hello');Definiera returvärden
Ange vad en mock ska returnera med mockReturnValue. För asynkron kod använder du mockResolvedValue för att lösa ett promise.
const getUser = jest.fn().mockResolvedValue({ id: 1, name: 'Ada' });
const user = await getUser();
expect(user.name).toBe('Ada');Kontrollera anrop
Spies låter dig verifiera interaktioner:
toHaveBeenCalled()toHaveBeenCalledTimes(n)toHaveBeenCalledWith(args)
const save = jest.fn();
save({ id: 1 });
expect(save).toHaveBeenCalledTimes(1);Mocka en modul
Om du vill ersätta en hel importerad modul använder du jest.mock(). Varje export blir automatiskt en mock som du kan konfigurera för varje test.
jest.mock('./mailer');
const mailer = require('./mailer');
mailer.send.mockResolvedValue(true);Spionera på befintliga metoder
Ibland vill du övervaka en riktig metod utan att ersätta den. jest.spyOn() omsluter en befintlig metod så att du kan göra påståenden och vid behov åsidosätta den.
const spy = jest.spyOn(console, 'log');
console.log('hi');
expect(spy).toHaveBeenCalledWith('hi');Återställ mellan tester
Mockar samlar på sig tillstånd. Återställ dem mellan tester så att anrop från ett test inte läcker över till ett annat.
mockClear()rensar anropsdatamockReset()rensar även implementationer
afterEach(() => {
jest.clearAllMocks();
});Mocka tiden
Tester som beror på den aktuella tiden blir instabila. Med Jest:s falska timers kan du styra klockan så att tidsgränser och datum blir deterministiska.
jest.useFakeTimers();
const fn = jest.fn();
setTimeout(fn, 1000);
jest.advanceTimersByTime(1000);
expect(fn).toHaveBeenCalled();Dependency Injection gör mocking enkelt
Kod som tar emot sina beroenden som argument är mycket enklare att testa än kod som importerar dem direkt. Utforma koden för testbarhet.
function createService(db) {
return { getUser: id => db.find(id) };
}
const fakeDb = { find: jest.fn().mockReturnValue({ id: 1 }) };
const svc = createService(fakeDb);Mocka inte för mycket
Om du mockar för mycket får du tester som bara bekräftar att dina mockar anropades – inte att koden fungerar. Mocka externa gränser (databas, nätverk), men testa den riktiga logiken direkt när du kan.
Snabbtest
Testa dina kunskaper om test doubles.
Sammanfattning
Du har lärt dig att isolera kod med test doubles:
- Skapa mockar med
jest.fn()och konfigurera returvärden - Ersätt moduler med
jest.mock() - Övervaka riktiga metoder med
jest.spyOn() - Återställ mockar mellan tester och styr tiden med falska timers
- Injicera beroenden för bättre testbarhet och undvik att mocka för mycket
Väl utformad mocking håller enhetstester snabba, tillförlitliga och fokuserade.
Lär dig JavaScript med en AI-lärare – gratis
Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.
- Kurser
- 22
- Lektioner
- 92
Vanliga frågor
Är lektionen ”Mockning och testdubbletter i Node.js” gratis?
Ja – hela texten till ”Mockning och testdubbletter i Node.js” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i Bootcamp i backendutveckling med Node.js, kan Ni uppgradera till CoddyKit PRO. Kursen i Bootcamp i backendutveckling med Node.js innehåller totalt 4 lektioner.
Vad lär jag mig i ”Mockning och testdubbletter i Node.js”?
Lär dig isolera koden som testas genom att ersätta riktiga beroenden med mocks, stubs och spies så att dina enhetstester förblir snabba och deterministiska. Ni övar på Bootcamp i backendutveckling med Node.js med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.
Behöver jag någon erfarenhet för att börja lära mig Bootcamp i backendutveckling med Node.js?
Du behöver inga förkunskaper. Utbildningen i Bootcamp i backendutveckling med Node.js på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 4 av 4.
Hur lång tid tar lektionen ”Mockning och testdubbletter i Node.js”?
De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.
Kan jag skriva och köra kod i den här Bootcamp i backendutveckling med Node.js-lektionen?
Ja. Varje Bootcamp i backendutveckling med Node.js-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.
Alla lektioner i den här kursen
- Enhetstestning med Jest
- Integrationstestning av API-slutpunkter
- Effektiva felsökningstekniker
- Mockning och testdubbletter i Node.js