2.4 KiB
2.4 KiB
Testing Guide
Setup
Tests verwenden Jest und Supertest.
Installation
npm install # Installiert auch dev-dependencies
Tests ausführen
Alle Tests
npm test
Tests mit Watch-Mode (Development)
npm run test:watch
Nur Unit-Tests
npm run test:unit
Mit Coverage-Report
npm test # Coverage ist standardmäßig aktiviert
Coverage-Report wird in coverage/ erstellt.
Test-Struktur
backend/
├── controllers/
│ ├── __tests__/
│ │ └── authController.test.js
│ └── authController.js
├── middleware/
│ ├── __tests__/
│ │ └── rateLimiter.test.js
│ └── rateLimiter.js
└── config/
├── __tests__/
│ └── env.test.js
└── env.js
Test-Beispiele
Unit Test (Controller)
describe('Auth Controller', () => {
it('should return 400 if username is missing', async () => {
const response = await request(app)
.post('/api/auth/login')
.send({ password: 'test123' });
expect(response.status).toBe(400);
});
});
Integration Test (mit MongoDB)
beforeAll(async () => {
await mongoose.connect(process.env.TEST_MONGO_URI);
});
afterAll(async () => {
await mongoose.connection.close();
});
Eigene Tests schreiben
-
Test-Datei erstellen:
# Immer in __tests__/ Ordner touch controllers/__tests__/userController.test.js -
Test schreiben:
const request = require('supertest'); describe('User Controller', () => { it('should get all users', async () => { // Test implementation }); }); -
Test ausführen:
npm test
Best Practices
- ✅ Ein Test = eine Funktion/Feature
- ✅ Tests sollten unabhängig voneinander sein
- ✅ Mocks für externe Services verwenden
- ✅ Aussagekräftige Test-Namen
- ✅ Arrange-Act-Assert Pattern
CI/CD Integration
Tests werden automatisch ausgeführt bei:
- Pull Requests
- Vor Deployment
- In GitHub Actions (wenn konfiguriert)
Aktuelle Test-Coverage
Führe aus: npm test
Ziele:
- 80%+ Coverage für Controllers
- 80%+ Coverage für Middleware
- 90%+ Coverage für Utils
Nächste Schritte
- Tests für alle Controller schreiben
- Integration-Tests mit Test-DB
- E2E-Tests für kritische Flows
- CI/CD Pipeline einrichten