Bootcamp i backendutvikling med Node.js · leksjon

Mocking og testdobler i Node.js

Lær å isolere koden som testes ved å erstatte ekte avhengigheter med mocks, stubs og spies, slik at enhetstestene forblir raske og deterministiske.

Leksjon 4 av 413 trinn

Mocking og testdobler i Node.js er en gratis leksjon i Bootcamp i backendutvikling med Node.js på CoddyKit. Dette er leksjon 4 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Bootcamp i backendutvikling med Node.js, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Bootcamp i backendutvikling med Node.js inneholder totalt 4 leksjoner.

Problemet med virkelige avhengigheter

En enhetstest bør kontrollere én logikkenhet isolert. Men ekte kode kaller databaser, API-er, klokkeslett og filsystemet – alt dette er tregt, ustabilt og uforutsigbart.

Test doubles erstatter disse avhengighetene med kontrollerbare etterligninger.

Typer test doubles

Vanlige begreper De vil møte:

  • Stub: returnerer en forhåndsdefinert verdi
  • Spy: registrerer hvordan den ble kalt
  • Mock: en stub + spy med innebygde forventninger
  • Fake: en lettvektsimplementasjon som faktisk fungerer

Opprette en mock-funksjon

I Jest oppretter jest.fn() en mock-funksjon. Den registrerer hvert kall og lar Dem kontrollere dem senere.

const callback = jest.fn();
callback('hello');
expect(callback).toHaveBeenCalledWith('hello');

Definere returverdier

Fortell en mock hva den skal returnere med mockReturnValue, eller bruk mockResolvedValue for asynkron kode som skal resolve et promise.

const getUser = jest.fn().mockResolvedValue({ id: 1, name: 'Ada' });
const user = await getUser();
expect(user.name).toBe('Ada');

Kontrollere kall

Spies lar Dem kontrollere samhandlinger:

  • toHaveBeenCalled()
  • toHaveBeenCalledTimes(n)
  • toHaveBeenCalledWith(args)
const save = jest.fn();
save({ id: 1 });
expect(save).toHaveBeenCalledTimes(1);

Mocke en modul

Bruk jest.mock() for å erstatte en hel importert modul. Hver eksport blir en automatisk mock som De kan konfigurere for hver test.

jest.mock('./mailer');
const mailer = require('./mailer');
mailer.send.mockResolvedValue(true);

Spionere på eksisterende metoder

Noen ganger vil De overvåke en ekte metode uten å erstatte den. jest.spyOn() pakker inn en eksisterende metode, slik at De kan kontrollere den og eventuelt overstyre den.

const spy = jest.spyOn(console, 'log');
console.log('hi');
expect(spy).toHaveBeenCalledWith('hi');

Tilbakestille mellom tester

Mocker samler opp tilstand. Tilbakestill dem mellom testene, slik at kall fra én test ikke lekker inn i en annen.

  • mockClear() tømmer kallinformasjonen
  • mockReset() tømmer også implementasjonene
afterEach(() => {
  jest.clearAllMocks();
});

Mocke tid

Tester som er avhengige av gjeldende klokkeslett, blir ustabile. Jest sine falske tidtakere lar Dem kontrollere klokken, slik at tidsavbrudd og datoer blir deterministiske.

jest.useFakeTimers();
const fn = jest.fn();
setTimeout(fn, 1000);
jest.advanceTimersByTime(1000);
expect(fn).toHaveBeenCalled();

Dependency injection gjør mocking enkelt

Kode som mottar avhengighetene sine som argumenter, er langt enklere å teste enn kode som importerer dem direkte. Utform koden med tanke på testbarhet.

function createService(db) {
  return { getUser: id => db.find(id) };
}
const fakeDb = { find: jest.fn().mockReturnValue({ id: 1 }) };
const svc = createService(fakeDb);

Ikke overdriv mocking

For mye mocking gir tester som bare bekrefter at mockene ble kalt – ikke at koden fungerer. Mock eksterne grenser (database, nettverk), men test den faktiske logikken direkte når De kan.

Hurtigsjekk

Test forståelsen Deres av test doubles.

Oppsummering

De har lært å isolere kode med test doubles:

  • Opprett mocker med jest.fn() og konfigurer returverdier
  • Erstatt moduler med jest.mock()
  • Overvåk ekte metoder med jest.spyOn()
  • Tilbakestill mocker mellom tester og kontroller tiden med falske tidtakere
  • Injiser avhengigheter for bedre testbarhet og unngå overdrevet mocking

God mocking holder enhetstester raske, pålitelige og fokuserte.

Gratis å komme i gang

Lær deg JavaScript med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
22
Leksjoner
92

Ofte stilte spørsmål

Er leksjonen «Mocking og testdobler i Node.js» gratis?

Ja – hele teksten i «Mocking og testdobler i Node.js» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av Bootcamp i backendutvikling med Node.js-kurset, kan du oppgradere til CoddyKit PRO. Kurset i Bootcamp i backendutvikling med Node.js inneholder totalt 4 leksjoner.

Hva lærer jeg i «Mocking og testdobler i Node.js»?

Lær å isolere koden som testes ved å erstatte ekte avhengigheter med mocks, stubs og spies, slik at enhetstestene forblir raske og deterministiske. Du øver på Bootcamp i backendutvikling med Node.js med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med Bootcamp i backendutvikling med Node.js?

Ingen tidligere erfaring er nødvendig. Bootcamp i backendutvikling med Node.js på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 4 av 4.

Hvor lang tid tar leksjonen «Mocking og testdobler i Node.js»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

Kan jeg skrive og kjøre kode i denne Bootcamp i backendutvikling med Node.js-leksjonen?

Ja. Alle Bootcamp i backendutvikling med Node.js-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. Enhetstesting med Jest
  2. Integrasjonstesting av API-endepunkter
  3. Effektive feilsøkingsteknikker
  4. Mocking og testdobler i Node.js
← Tilbake til Bootcamp i backendutvikling med Node.js