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ä.
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ää kutsutiedotmockReset()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.
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
- Yksikkötestaus Jestillä
- API-päätepisteiden integraatiotestaus
- Tehokkaat virheenkorjaustekniikat
- Mockit ja testikaksoisolennot Node.js:ssä