Hosting API-ja nosi odgovornost za njegovo funkcioniranje. Ne postoji bolji ili lakši način za to od automatiziranog testiranja s alatom kao što je Mocha.

Moderni razvoj softvera uvelike koristi API-je. Oni služe kao ključna poveznica između aplikacija na strani klijenta i pozadinskih aplikacija, kao i između različitih internih ili eksternih aplikacija.

API-ji omogućuju glatku komunikaciju i razmjenu podataka, dopuštajući softverskim komponentama besprijekornu međusobnu interakciju. Osiguravanje pouzdanosti, funkcionalnosti i performansi ovih API-ja od najveće je važnosti za pružanje besprijekornog korisničkog iskustva i održavanje ukupnog integriteta sustava.

Stoga je važno temeljito testirati svoje API-je kako biste označili i ispravili greške tijekom razvoja kako biste spriječili potencijalne kvarove sustava u proizvodnim okruženjima.

Testiranje Node.js API-ja koristeći Mocha, Chai i Chai-HTTP

Moka široko je korišten okvir za testiranje koji je kompatibilan s raznim JavaScript okviri. Jedna od njegovih ključnih značajki je fleksibilan pokretač testova koji pojednostavljuje proces upravljanja i učinkovitog izvršavanja testnih slučajeva.

instagram viewer

Također podržava različite stilove testiranja, uključujući sinkrono i asinkrono testiranje, što omogućuje širok raspon scenarija testiranja.

S druge strane, čaj i Chai-HTTP su biblioteke tvrdnji koje možete koristiti u kombinaciji s Mocha. Chai pruža širok raspon izražajnih i čitljivih sučelja za tvrdnje kao što su trebali, očekivati ​​i tvrditi. Dok Chai-HTTP, proširenje Chai-a, pruža sučelje posebno dizajnirano za testiranje HTTP zahtjeva i potvrđivanje njihovih odgovora.

Korištenjem Mocha u kombinaciji s Chai i Chai-HTTP, možete učinkovito testirati API-je. Tijek rada testiranja uključuje:

  • Upućivanje HTTP zahtjeva navedenim API krajnjim točkama.
  • Definiranje očekivanih odgovora.
  • Provjera valjanosti primljenih podataka iz navedenog izvora, HTTP statusnih kodova i više.

Također možete simulirati scenarije testiranja pogrešaka API-ja koji se mogu pojaviti u takvim situacijama i koje bi radnje trebale pokrenuti u slučaju da se dogode.

Kôd ovog projekta možete pronaći u GitHub spremište.

Postavite Express.js projekt i MongoDB bazu podataka

Započeti, stvoriti Express web poslužitelj, i instalirajte ove pakete:

npm instalirajte cors dotenv mongoose mongodb

Sljedeći, stvoriti MongoDB bazu podataka ili konfigurirati MongoDB klaster u oblaku. Zatim kopirajte URL veze s bazom podataka, stvorite a .env datoteku u korijenskom direktoriju i zalijepite u niz veze baze podataka:

CONNECTION_STRING="niz veze"

Kako biste dovršili postupak postavljanja, trebate konfigurirati vezu s bazom podataka i definirati podatkovne modele za svoje korisničke podatke. Pogledajte kod u GitHub repozitoriju ovog projekta da biste:

  • Konfigurirajte vezu s bazom podataka, u utils/db.js.
  • Definirajte shemu korisničkih podataka u modeli/user.model.js.

Definirajte funkcije rukovatelja za API rute

Funkcije kontrolera upravljat će dodavanjem i dohvaćanjem korisničkih podataka u bazi podataka. Kako biste osigurali funkcionalnost ovih funkcija rukovatelja, testirat ćete mogu li uspješno objaviti i dohvatiti podatke iz baze podataka.

U korijenskom direktoriju kreirajte a kontroleri/userControllers.js datoteku i dodajte sljedeći kod:

konst Korisnik = zahtijevati('../models/user.model');

exports.registerUser = asinkroni (req, res) => {
konst { korisničko ime, lozinka } = req.body;

probati {
čekati User.create({ korisničko ime, lozinka});
res.status(201).poslati({ poruka: 'Korisnik se uspješno registrirao' });
} ulov (pogreška) {
konzola.log (greška);
res.status(500).poslati({ poruka: 'Dogodila se pogreška!! ' });
}
};

exports.getUsers = asinkroni (req, res) => {
probati {
konst korisnici = čekati User.find({});
res.json (korisnici);
} ulov (pogreška) {
konzola.log (greška);
res.status(500).poslati({ poruka: 'Dogodila se pogreška!!' });
}
};

Definirajte API rute

Stvorite novi routes/userRoutes.js datoteku u korijenskom direktoriju i dodajte sljedeći kod.

konst izraziti = zahtijevati('izraziti');
konst ruter = express. Usmjerivač();
konst korisnički kontroleri = zahtijevati('../controllers/userControllers');

usmjerivač.post('/api/register', userControllers.registerUser);
router.get('/api/users', userControllers.getUsers);
modul.exports = usmjerivač;

Definirajte svoju ulaznu točku poslužitelja

Ažurirajte svoje server.js datoteku sa sljedećim kodom.

konst izraziti = zahtijevati('izraziti');
konst cors = zahtijevati('cors');
konst app = express();
konst luka = 5000;
zahtijevati('dotenv').config();
konst povezivanjeDB = zahtijevati('./utils/db');

povezivanjeDB();

app.use (express.json());
app.use (express.urlencoded({ proširena: pravi }));
app.use (cors());

konst userRoutes = zahtijevati('./routes/userRoutes');
app.use('/', korisničke rute);

app.listen (port, () => {
konzola.log(`Poslužitelj sluša http://localhost:${port}`);
});

modul.izvozi = aplikacija;

Napišite i izvršite testne slučajeve s Mocha

S korisničkim API-jem na mjestu, konfigurirajte testno okruženje. Prvo instalirajte ove pakete kao ovisnosti o razvojnim programerima.

npm instalirajte mocha chai chai-http --save-dev

Sada dodajte sljedeću skriptu u datoteku package.json.

"skripte": {
"test": "mocha --timeout 10000"
},

Ova naredba će izvršiti testne slučajeve—dodavanje svojstva timeout s odgovarajućom vrijednošću omogućuje vam kontrolu maksimalnog vremena dopuštenog za izvršenje pojedinačnih testnih slučajeva.

Ovo može biti korisno za sprječavanje beskonačnog izvođenja testova ili prebrzog dovršetka prije završetka testnih slučajeva.

Testirajte krajnje točke API-ja

U korijenskom direktoriju stvorite novu mapu i dajte joj naziv test. Unutar ove mape stvorite novu korisnik.testovi.js datoteku i dodajte sljedeći kod za testni slučaj POST krajnje točke.

konst čaj = zahtijevati('chai');
konst čajHttp = zahtijevati('chai-http');
konst aplikacija = zahtijevati('../poslužitelj');

chai.use (chaiHttp);
konst očekivati ​​= chai.očekivati;

opisati('Korisnički API', () => {
opisati('POST /api/register', () => {
to('trebao bi obraditi registraciju korisnika', (gotovo) => {
chai.request (aplikacija)
.post('/api/register')
.poslati({ Korisničko ime: 'testUser', lozinka: 'testna lozinka' })
.kraj((pogriješiti, res) => {
ako (pogreška) {
očekuj (res).to.have.status(500);
očekuj (res.tijelo).da.imaš.property('poruka').to.je.jednako('Dogodila se pogreška!!');
} drugo {
očekuj (res).to.have.status(201);
očekuj (res.tijelo).da.imaš.property('poruka').jednak('Korisnik se uspješno registrirao');
}

gotovo();
});
});
});
});

Ovaj kod definira testni slučaj koristeći Chai i Chai HTTP za testiranje funkcionalnosti korisničke registracije korisničkog API-ja.

Šalje POST zahtjev navedenoj krajnjoj točki i daje tvrdnje o očekivanom API odgovoru, provjeravajući je li funkcija registracije korisnika bila uspješna ili je došlo do pogreške.

Evo raščlambe glavnih komponenti testnog slučaja:

  • očekivati -Ovaj objekt vam omogućuje da koristite Chai assertion metode za izradu tvrdnji o očekivanom odgovoru od API-ja.
  • opisati - Zajedno opisuje povezane testne slučajeve, u ovom slučaju testove koji se odnose na Korisnički API. Ugniježđeni blok opisa dalje grupira povezane testne slučajeve zajedno, u ovom slučaju, POST /api/registar. To pomaže organizirati testne slučajeve koji se posebno odnose na određenu funkcionalnost.
  • to - Ova funkcija opisuje očekivano ponašanje krajnje točke API-ja.
  • kraj - Ova funkcija šalje zahtjev i pruža funkciju povratnog poziva za obradu odgovora. Funkcija povratnog poziva izvodi tvrdnje pomoću očekivati funkcija za provjeru odgovora primljenog od API-ja.
  • učinjeno - Ova funkcija radi kako bi označila kraj testa.

Na kraju, dodajte kod za GET testni slučaj krajnje točke odmah nakon POST testnog slučaja krajnje točke.

opisati('GET /api/users', () => {
to('treba dohvatiti sve korisničke podatke', (gotovo) => {
chai.request (aplikacija)
.dobiti('/api/users')
.kraj((pogriješiti, res) => {
ako (pogreška) {
očekuj (res).to.have.status(500);
očekuj (res.tijelo).da.imaš.property('poruka').to.je.jednako('Došlo je do pogreške prilikom dohvaćanja korisničkih podataka');
} drugo {
očekuj (res).to.have.status(200);
očekivati ​​(res.tijelo).to.be.an('niz');
}

gotovo();
});
});
});

Samo naprijed i pokrenite testnu skriptu na svom terminalu da biste izvršili dva testna slučaja.

npm test

Ako izvođenje testnih slučajeva ne naiđe na pogreške, trebali biste vidjeti sličan izlaz koji pokazuje da su testovi uspješno prošli.

Neuspješni testovi mogu se pojaviti zbog različitih razloga, kao što su problemi s mrežnom vezom tijekom HTTP zahtjeva prema bazi podataka, nedostajući potrebni podaci, logičke pogreške i drugi problemi.

Mocha dobro radi identificiranje i naglašavanje takvih pogrešaka, pružajući jasna i detaljna izvješća o ispitivanju u zapisima prikazanim na prozoru terminala. To vam omogućuje jednostavno prepoznavanje i dijagnosticiranje specifičnih problema koji su uzrokovali neuspjehe testa.

Mocha vam ne daje izgovor da ne testirate svoje API-je

Dok je ručno testiranje funkcionalnosti vaših API-ja pomoću alata kao što je Postman valjano testiranje pristup, korištenje Mocha i drugih okvira za testiranje za automatizirano testiranje vodi do sljedećeg razini.

Pomoću ovih alata za testiranje možete brzo i jednostavno automatizirati testove kako biste pokrili širok raspon scenarija i rubnih slučajeva. To vam omogućuje brzo otkrivanje grešaka i njihovo rješavanje prije postavljanja vaših API-ja, osiguravajući slanje visokokvalitetnog softvera u proizvodnju.