Skip to content

API testimine — projekti ülevaade

Miks eraldi API projekt?

Unit testid Vitestiga (Unit testid) on isoleeritud. Päris API ühendab HTTP, äriloogika, andmebaasi ja migratsioonid. Selle projektiga harjutad integration teste Supertestiga ja saad sama API'd testida Postmaniga.

See leht selgitab projekti struktuuri. Hands-on ülesanded on töötuba.


Eesmärk

Töötame töötoa broneerimise API-ga — sama äri stsenaarium kogu mooduli vältel:

  • Loo kasutajaid ja töötubasid
  • Broneeri kohti
  • Kontrolli reegleid (täis workshop, topeltbroneering)

Projekt kasutab kihilist arhitektuuri, mida mockimise peatükis õpitud.


1. Projekti kloonimine ja käivitamine

Õpetaja annab scaffold projekti lingi:

bash
git clone https://github.com/vikatgen/test-handbook-nodejs-express-application.git
cd test-handbook-nodejs-express-application
npm install

Kontrolli:

bash
node --version   # >= 18
docker --version

2. Projekti struktuur

workshop-booking-api/
├── src/
│   ├── app.js              ← Express rakendus (export testidele)
│   ├── server.js           ← Porti kuulav server
│   ├── routes/
│   ├── controllers/
│   ├── services/           ← Unit testide sihtmärk (mock repo)
│   └── repositories/       ← Andmebaas
├── prisma/
│   └── schema.prisma
├── tests/
│   ├── unit/
│   ├── integration/
│   └── helpers/
│       └── resetDb.js
├── docker-compose.yml
├── .env
├── .env.test
└── package.json

Seos teooriaga

Service → unit test mockidega. Kogu stack → integration test Supertest + test DB.


3. Kihiline arhitektuur

Route → Controller → Service → Repository → Database
KihtNäideTestimine
RoutebookingRoutes.jsIntegration
ControllerbookingController.jsIntegration
ServicebookingService.jsUnit (mock)
RepositorybookingRepository.jsIntegration

4. Docker ja kaks andmebaasi

bash
docker compose up -d
AndmebaasEnvKasutus
app_dev.envArendus
app_test.env.testAutomaattestid

Migratsioonid:

bash
npx prisma migrate dev
npm run migrate:test

WARNING

Mõlemad andmebaasid peavad migratsioonid saama — muidu integration testid ebaõnnestuvad.


5. Prisma skeem (lühidalt)

prisma
model Booking {
  id         Int      @id @default(autoincrement())
  userId     Int
  workshopId Int
  user       User     @relation(...)
  workshop   Workshop @relation(...)

  @@unique([userId, workshopId])
}

@@unique — sama kasutaja ei saa sama workshop'i kaks korda broneerida.


6. Testkeskkond

npm test / vitest kasutab .env.test — ühendus test-andmebaasiga.

js
beforeEach(async () => {
  await resetDb();
});

Iga integration test algab puhtast olekust.


7. API endpointid

MeetodURLKirjeldus
GET/healthTervisekontroll
POST/usersLoo kasutaja
POST/workshopsLoo workshop
POST/bookingsLoo broneering

Ärireeglid (bookings):

  • Workshop peab eksisteerima
  • Workshop ei tohi olla täis
  • Topeltbroneering keelatud

Swagger: http://localhost:3000/docs


8. Kolm viisi sama API testida

ViisMillal?Leht
Vitest + SupertestCI, regressioonIntegration, Töötuba
PostmanKäsitsi, jõudlus, demoPostman
PlaywrightKui on Vite frontend API-leUI testimine

9. Enne töötuba — kontrollnimekiri

  • [ ] Docker töötab
  • [ ] Migratsioonid mõlemas DB-s
  • [ ] npm run dev — Swagger avaneb
  • [ ] npm test — olemasolevad testid läbivad
  • [ ] Mõistan service vs integration testi vahet

Järgmine samm: Praktiline töötuba


10. Lisamaterjalid

Õppematerjal sisekasutuseks (Kuressaare Ametikool).