Gostovanje API-ja nosi odgovornost za zagotovitev njegovega delovanja. Ni boljšega ali enostavnejšega načina za to kot avtomatizirano testiranje z orodjem, kot je Mocha.
Sodoben razvoj programske opreme odlično uporablja API-je. Služijo kot ključna povezava med aplikacijami na strani odjemalca in zalednimi aplikacijami ter med različnimi notranjimi ali zunanjimi aplikacijami.
API-ji omogočajo nemoteno komunikacijo in izmenjavo podatkov, kar omogoča nemoteno medsebojno delovanje komponent programske opreme. Zagotavljanje zanesljivosti, funkcionalnosti in zmogljivosti teh API-jev je izjemnega pomena za zagotavljanje brezhibne uporabniške izkušnje in ohranjanje splošne celovitosti sistema.
Zato je pomembno, da temeljito preizkusite svoje API-je, da med razvojem označite in odpravite hrošče, da preprečite morebitne okvare sistema v produkcijskih okoljih.
Testiranje API-jev Node.js z uporabo Mocha, Chai in Chai-HTTP
moka je široko uporabljen testni okvir, ki je združljiv z različnimi ogrodje JavaScript
. Ena njegovih ključnih lastnosti je prilagodljiv izvajalec preizkusov, ki poenostavlja proces upravljanja in učinkovitega izvajanja testnih primerov.Podpira tudi različne stile testiranja, vključno s sinhronim in asinhronim testiranjem, kar omogoča širok nabor scenarijev testiranja.
Po drugi strani, Čaj in Chai-HTTP so knjižnice trditev, ki jih lahko uporabljate v povezavi z Mocha. Chai ponuja široko paleto izraznih in berljivih vmesnikov za trditve, kot so bi morali, pričakovati in trditi. Medtem ko Chai-HTTP, razširitev Chai, ponuja vmesnik, posebej zasnovan za testiranje zahtev HTTP in uveljavljanje njihovih odgovorov.
Z uporabo Mocha v povezavi s Chai in Chai-HTTP lahko učinkovito testirate API-je. Potek testiranja vključuje:
- Izdelava zahtev HTTP do navedenih končnih točk API-ja.
- Opredelitev pričakovanih odzivov.
- Preverjanje prejetih podatkov iz navedenega vira, statusne kode HTTP itd.
Prav tako lahko simulirate scenarije testiranja napak API-ja, ki se lahko pojavijo v takih situacijah, in katera dejanja naj se sprožijo, če se zgodijo.
Kodo tega projekta najdete v Repozitorij GitHub.
Nastavite projekt Express.js in zbirko podatkov MongoDB
Za začetek, ustvarite spletni strežnik Expressin namestite te pakete:
npm namestite cors dotenv mongoose mongodb
Naslednji, ustvarite bazo podatkov MongoDB oz konfigurirajte gručo MongoDB v oblaku. Nato kopirajte URL povezave z bazo podatkov, ustvarite a .env datoteko v korenskem imeniku in prilepite povezovalni niz baze podatkov:
CONNECTION_STRING="povezavni niz"
Če želite dokončati postopek namestitve, morate konfigurirati povezavo z bazo podatkov in definirati podatkovne modele za svoje uporabniške podatke. Oglejte si kodo v repozitoriju GitHub tega projekta za:
- Konfigurirajte povezavo z bazo podatkov, v utils/db.js.
- Določite shemo uporabniških podatkov v modeli/user.model.js.
Definirajte funkcije obdelovalca za poti API-ja
Funkcije krmilnika bodo upravljale dodajanje in pridobivanje uporabniških podatkov v bazi podatkov. Da bi zagotovili delovanje teh funkcij obdelovalca, boste preizkusili, ali lahko uspešno objavijo in pridobijo podatke iz baze podatkov.
V korenskem imeniku ustvarite a krmilniki/userControllers.js datoteko in dodajte naslednjo kodo:
konst Uporabnik = zahtevati('../models/user.model');
exports.registerUser = asinh (req, res) => {
konst { uporabniško ime, geslo } = req.body;poskusi {
čakati User.create({ uporabniško ime, geslo});
res.status(201).pošlji({ sporočilo: 'Uporabnik je uspešno registriran' });
} ulov (napaka) {
konzola.log (napaka);
res.status(500).pošlji({ sporočilo: 'Pojavila se je napaka!! ' });
}
};
exports.getUsers = asinh (req, res) => {
poskusi {
konst uporabniki = čakati User.find({});
res.json (uporabniki);
} ulov (napaka) {
konzola.log (napaka);
res.status(500).pošlji({ sporočilo: 'Pojavila se je napaka!!' });
}
};
Določite poti API-ja
Ustvari novo routes/userRoutes.js datoteko v korenskem imeniku in dodajte naslednjo kodo.
konst izraziti = zahtevati('express');
konst usmerjevalnik = express. Usmerjevalnik();
konst uporabniški krmilniki = zahtevati('../controllers/userControllers');
router.post('/api/register', userControllers.registerUser);
router.get('/api/uporabniki', userControllers.getUsers);
modul.exports = usmerjevalnik;
Določite vstopno točko strežnika
Posodobite svoje server.js datoteko z naslednjo kodo.
konst izraziti = zahtevati('express');
konst cors = zahtevati('cors');
konst app = express();
konst pristanišče = 5000;
zahtevati('dotenv').config();
konst povežiDB = zahtevati('./utils/db');povežiDB();
app.use (express.json());
app.use (express.urlencoded({ podaljšan: prav }));
app.use (cors());konst userRoutes = zahtevati('./routes/userRoutes');
app.use('/', uporabniške poti);app.listen (vrata, () => {
konzola.log(`Strežnik posluša http://localhost:${port}`);
});
modul.exports = app;
Napišite in izvedite testne primere z Mokko
Z nameščenim uporabniškim API-jem nadaljujte in konfigurirajte preskusno okolje. Najprej namestite te pakete kot odvisnosti od razvijalcev.
npm namestite mocha chai chai-http --save-dev
Zdaj v datoteko package.json dodajte naslednji skript.
"skripte": {
"test": "mocha --timeout 10000"
},
Ta ukaz bo izvedel testne primere – dodajanje lastnosti časovne omejitve z ustrezno vrednostjo vam omogoča nadzor najdaljšega dovoljenega časa za izvedbo posameznih testnih primerov.
To je lahko uporabno za preprečevanje neskončnega izvajanja testov ali prehitrega zaključka, preden se testni primeri končajo.
Preizkusite končne točke API-ja
V korenskem imeniku ustvarite novo mapo in jo poimenujte test. Znotraj te mape ustvarite novo uporabnik.testi.js in dodajte naslednjo kodo za testni primer končne točke POST.
konst čaj = zahtevati('chai');
konst chaiHttp = zahtevati('chai-http');
konst aplikacija = zahtevati('../strežnik');chai.use (chaiHttp);
konst pričakujem = chai.expect;opisati ('Uporabniški API', () => {
opisati ('POST /api/register', () => {
to('naj obravnava registracijo uporabnika', (končano) => {
chai.request (aplikacija)
.post('/api/register')
.send({ uporabniško ime: 'testUser', geslo: 'testpassword' })
.end((napaka, res) => {
če (napaka) {
pričakuj (res).to.have.status(500);
pričakuj (res.telo).to.have.property('sporočilo').to.je.enako('Pojavila se je napaka!!');
} drugače {
pričakuj (res).to.have.status(201);
pričakuj (res.telo).to.have.property('sporočilo').equal('Uporabnik je uspešno registriran');
}
Končano();
});
});
});
});
Ta koda definira testni primer z uporabo Chai in Chai HTTP za preizkušanje funkcionalnosti registracije uporabnika uporabniškega API-ja.
Pošlje zahtevo POST določeni končni točki in poda trditve o pričakovanem odzivu API-ja ter preveri, ali je bila funkcija registracije uporabnika uspešna ali je prišlo do napake.
Tukaj je razčlenitev glavnih komponent testnega primera:
- pričakovati -Ta objekt vam omogoča, da uporabite metode trditve Chai za izdelavo trditev o pričakovanem odzivu API-ja.
- opisati - Opisuje povezane testne primere skupaj, v tem primeru teste, povezane z Uporabniški API. Ugnezdeni opisni blok nadalje združuje povezane testne primere, v tem primeru POST /api/register. To pomaga organizirati testne primere, ki so posebej povezani z določeno funkcionalnostjo.
- to - Ta funkcija opisuje pričakovano vedenje končne točke API.
- konec - Ta funkcija pošlje zahtevo in nudi funkcijo povratnega klica za obdelavo odgovora. Funkcija povratnega klica izvaja trditve z uporabo pričakovati funkcijo za preverjanje odgovora, prejetega od API-ja.
- Končano - Ta funkcija se zažene, da označi konec testnega primera.
Na koncu dodajte kodo za testni primer končne točke GET takoj za testnim primerom končne točke POST.
opisati ('GET /api/users', () => {
to('mora pridobiti vse uporabniške podatke', (končano) => {
chai.request (aplikacija)
.get('/api/uporabniki')
.end((napaka, res) => {
če (napaka) {
pričakuj (res).to.have.status(500);
pričakuj (res.telo).to.have.property('sporočilo').to.je.enako('Pri pridobivanju uporabniških podatkov je prišlo do napake');
} drugače {
pričakuj (res).to.have.status(200);
pričakuj (res.telo).to.be.an('matrika');
}
Končano();
});
});
});
Nadaljujte in zaženite testni skript na vašem terminalu, da izvedete dva testna primera.
npm test
Če pri izvajanju testnih primerov ne pride do napak, bi morali videti podoben rezultat, ki kaže, da so bili testi uspešno opravljeni.
Do napak pri preizkusu lahko pride zaradi različnih razlogov, kot so težave z omrežno povezljivostjo med zahtevami HTTP v zbirko podatkov, manjkajoči zahtevani podatki, logične napake in druge težave.
Mocha dobro prepoznava in poudarja takšne napake ter zagotavlja jasna in podrobna poročila o preskusih v dnevnikih, prikazanih v oknu terminala. To vam omogoča preprosto prepoznavanje in diagnosticiranje specifičnih težav, ki so povzročile neuspešne preizkuse.
Mocha vam ni izgovor, da ne preizkusite svojih API-jev
Medtem ko je ročno testiranje funkcionalnosti vaših API-jev z orodji, kot je Postman, veljavno testiranje pristop, izkoriščanje Mocha in drugih testnih ogrodij za avtomatizirano testiranje ga popelje na naslednji način raven.
S temi orodji za testiranje lahko hitro in enostavno avtomatizirate teste, da pokrijete širok spekter scenarijev in robnih primerov. To vam omogoča, da hitro zaznate hrošče in jih odpravite, preden uvedete svoje API-je, s čimer zagotovite pošiljanje visokokakovostne programske opreme v proizvodnjo.