Node.js-taustakehityksen bootcamp · Oppitunti

Mockit ja testikaksoisolennot Node.js:ssä

Opi eristämään testattava koodi korvaamalla todelliset riippuvuudet mockeilla, stubeilla ja spy-objekteilla, jotta yksikkötestisi pysyvät nopeina ja deterministisinä.

Oppitunti 4/413 vaihetta

Mockit ja testikaksoisolennot Node.js:ssä on ilmainen Node.js-taustakehityksen bootcamp-oppitunti CoddyKitissä. Tämä on oppitunti 4/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu Node.js-taustakehityksen bootcamp-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Node.js-taustakehityksen bootcamp-kurssilla on yhteensä 4 oppituntia.

Oikeiden riippuvuuksien ongelma

Yksikkötestin pitäisi tarkistaa yksi logiikan osa erillään. Tosielämän koodi kuitenkin kutsuu tietokantoja, rajapintoja, kelloa ja tiedostojärjestelmää — kaikki ovat hitaita, epävakaita ja ennalta arvaamattomia.

Testikaksoiset korvaavat nämä riippuvuudet hallittavilla jäljitelmillä.

Testikaksoisten tyypit

Yleisiä termejä, joihin törmäätte:

  • Stub: palauttaa ennalta määritetyn arvon
  • Spy: tallentaa, miten sitä kutsuttiin
  • Mock: stub + spy, jossa on sisäänrakennetut odotukset
  • Fake: kevyt toimiva toteutus

Mock-funktion luominen

Jestissä jest.fn() luo mock-funktion. Se tallentaa jokaisen kutsun, joten voitte tarkistaa ne myöhemmin.

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

Palautusarvojen määrittäminen

Voitte määrittää mockin palauttaman arvon komennolla mockReturnValue. Asynkronisessa koodissa voitte käyttää komentoa mockResolvedValue promisen ratkaisemiseen.

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

Kutsujen tarkistaminen

Spy-toimintojen avulla voitte varmistaa vuorovaikutukset:

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

Moduulin mockaaminen

Voitte korvata kokonaan tuodun moduulin komennolla jest.mock(). Jokaisesta viennistä tulee automaattinen mock, jonka voitte määrittää testikohtaisesti.

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

Olemassa olevien metodien tarkkailu

Joskus haluatte tarkkailla oikeaa metodia korvaamatta sitä. jest.spyOn() käärii olemassa olevan metodin, joten voitte tarkistaa sen toiminnan ja halutessanne ohittaa sen toteutuksen.

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

Nollaaminen testien välillä

Mockit keräävät tilaa. Nollatkaa ne testien välillä, jotta yhden testin kutsut eivät vaikuta toiseen.

  • mockClear() tyhjentää kutsutiedot
  • mockReset() tyhjentää lisäksi toteutukset
afterEach(() => {
  jest.clearAllMocks();
});

Ajan mockaaminen

Nykyiseen aikaan perustuvat testit ovat epävakaita. Jestin valheellisten ajastinten avulla voitte hallita kelloa, jolloin aikakatkaisut ja päivämäärät ovat deterministisiä.

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

Riippuvuuksien injektointi helpottaa mockaamista

Koodi, joka saa riippuvuutensa argumentteina, on paljon helpompi testata kuin koodi, joka tuo ne suoraan. Suunnitelkaa koodi testattavaksi.

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

Älkää mockatko liikaa

Liiallinen mockaaminen tuottaa testejä, jotka vain varmistavat mockien kutsut — eivät sitä, että koodi toimii. Mockatkaa ulkoiset rajapinnat (tietokanta, verkko), mutta testatkaa varsinainen logiikka suoraan aina kun mahdollista.

Pikatarkistus

Testatkaa ymmärrystänne testikaksoisista.

Kertaus

Opitte eristämään koodia testikaksoisten avulla:

  • Luokaa mockeja komennolla jest.fn() ja määrittäkää palautusarvot
  • Korvatkaa moduuleja komennolla jest.mock()
  • Tarkkailkaa oikeita metodeja komennolla jest.spyOn()
  • Nollatkaa mockit testien välillä ja hallitkaa aikaa valheellisten ajastinten avulla
  • Injektoikaa riippuvuudet testattavuuden parantamiseksi ja välttäkää liiallista mockaamista

Hyvä mockaaminen pitää yksikkötestit nopeina, luotettavina ja kohdennettuina.

Aloita maksutta

Opi JavaScript tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
22
Oppitunnit
92

Usein kysytyt kysymykset

Onko oppitunti ”Mockit ja testikaksoisolennot Node.js:ssä” ilmainen?

Kyllä – oppitunnin ”Mockit ja testikaksoisolennot Node.js:ssä” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko Node.js-taustakehityksen bootcamp-kurssin, päivitä CoddyKit PROhon. Node.js-taustakehityksen bootcamp-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”Mockit ja testikaksoisolennot Node.js:ssä”?

Opi eristämään testattava koodi korvaamalla todelliset riippuvuudet mockeilla, stubeilla ja spy-objekteilla, jotta yksikkötestisi pysyvät nopeina ja deterministisinä. Harjoittelet Node.js-taustakehityksen bootcamp-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni Node.js-taustakehityksen bootcamp-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin Node.js-taustakehityksen bootcamp-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 4/4.

Kuinka kauan ”Mockit ja testikaksoisolennot Node.js:ssä”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä Node.js-taustakehityksen bootcamp-oppitunnilla?

Kyllä. Jokainen Node.js-taustakehityksen bootcamp-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. Yksikkötestaus Jestillä
  2. API-päätepisteiden integraatiotestaus
  3. Tehokkaat virheenkorjaustekniikat
  4. Mockit ja testikaksoisolennot Node.js:ssä
← Takaisin: Node.js-taustakehityksen bootcamp