--- name: NestJS Testing description: Unit and E2E testing with Jest, mocking strategies, and database isolation patterns. metadata: labels: [nestjs, testing, jest, e2e] triggers: files: ['**/*.spec.ts', 'test/**/*.e2e-spec.ts'] keywords: [Test.createTestingModule, supertest, jest, beforeEach] --- # NestJS Testing ## **Priority: P2 (MAINTENANCE)** ## Structure ``` src/**/*.spec.ts # Unit tests (isolated logic) test/**/*.e2e-spec.ts # E2E tests (full app flows) ``` ## Unit Testing - **Setup**: Use `Test.createTestingModule()` with mocked providers - **Mocks**: Mock all dependencies via `{ provide: X, useValue: mockX }` - **Pattern**: AAA (Arrange-Act-Assert) - **Cleanup**: Call `jest.clearAllMocks()` in `afterEach` ## E2E Testing - **Database**: Use real test DB (Docker). Never mock DB in E2E. - **Cleanup**: Mandatory. Use transaction rollback or `TRUNCATE` in `afterEach`. - **App Init**: Create app in `beforeAll`, close in `afterAll` - **Guards**: Override via `.overrideGuard(X).useValue({ canActivate: () => true })` ## Anti-Patterns - **No Private Tests**: Test via public methods, not `service['privateMethod']`. - **No DB Mocks in E2E**: Use real DB with cleanup. Mocks defeat E2E purpose. - **No Shared State**: Call `jest.clearAllMocks()` in `afterEach`. Random failures otherwise. - **No Resource Leaks**: Always close app and DB in `afterAll`. ## References Setup examples, mocking patterns, E2E flows, test builders, coverage config: [references/patterns.md](references/patterns.md)