jagd-apps/stoeberhunde/backend/TESTING.md

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

  1. Test-Datei erstellen:

    # Immer in __tests__/ Ordner
    touch controllers/__tests__/userController.test.js
    
  2. Test schreiben:

    const request = require('supertest');
    
    describe('User Controller', () => {
      it('should get all users', async () => {
        // Test implementation
      });
    });
    
  3. 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

  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