# Testing Guide ## Setup Tests verwenden **Jest** und **Supertest**. ### Installation ```bash npm install # Installiert auch dev-dependencies ``` ## Tests ausführen ### Alle Tests ```bash npm test ``` ### Tests mit Watch-Mode (Development) ```bash npm run test:watch ``` ### Nur Unit-Tests ```bash npm run test:unit ``` ### Mit Coverage-Report ```bash 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) ```javascript 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) ```javascript beforeAll(async () => { await mongoose.connect(process.env.TEST_MONGO_URI); }); afterAll(async () => { await mongoose.connection.close(); }); ``` ## Eigene Tests schreiben 1. **Test-Datei erstellen:** ```bash # Immer in __tests__/ Ordner touch controllers/__tests__/userController.test.js ``` 2. **Test schreiben:** ```javascript const request = require('supertest'); describe('User Controller', () => { it('should get all users', async () => { // Test implementation }); }); ``` 3. **Test ausführen:** ```bash 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 1. [ ] Tests für alle Controller schreiben 2. [ ] Integration-Tests mit Test-DB 3. [ ] E2E-Tests für kritische Flows 4. [ ] CI/CD Pipeline einrichten