Bootcamp i backendutveckling med Node.js · Lektion

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.

Lektion 4 av 413 steg

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 anropsdata
  • mockReset() 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.

Gratis att börja

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

  1. Enhetstestning med Jest
  2. Integrationstestning av API-slutpunkter
  3. Effektiva felsökningstekniker
  4. Mockning och testdubbletter i Node.js
← Tillbaka till Bootcamp i backendutveckling med Node.js