Nest.js 12 ile Jest'te Decorator Tabanlı Testler ESM Modunda

Nest.js 12 paketleri artık sadece ESM formatında geliyor ve Jest bunları native ESM modunda yükleyebiliyor. Ama bu kurulum biraz zahmetli olabiliyor. nestjs-jest-decorators bu süreci kolaylaştırıyor ve aynı zamanda testleri sınıf tabanlı yazmanı sağlıyor.

Decorator yaklaşımı ile test suite'leri ve testler birer sınıf ve metod haline geliyor. Test sınıfları Nest provider olduğu için `@Inject()` ile dependency injection yapabiliyorsun, `app.get()` çağrısına gerek yok.

```
@TestSuite('Demo Test Suite')
export class DemoTest {
@Inject() private readonly httpService!: HttpService;

@Test('Get Test')
async testGet(): Promise<void> {
const { data } = await firstValueFrom(
this.httpService.get('http://localhost:4343/demo')
);
expect(data).toBe('Hello, Test world!');
}
}
```

`@TestSuite` bir Jest `describe` bloğu, `@Test` ise bir `it` bloğu gibi çalışıyor.

Kurulum için Node.js ^20.19.0, ^22.12.0 veya >=24.0.0 gerekli. TypeScript 6.0 veya altında kalman lazım ts-jest kullanıyorsan.

```
npm i --save-dev nestjs-jest-decorators jest @jest/globals ts-jest typescript@~6.0.0 @nestjs/testing @types/node
```

Bu yaklaşım özellikle büyük Nest.js projelerinde test kodunu daha organize ve okunabilir hale getiriyor. Sınıf yapısı sayesinde test logic'ini modüler tutabiliyorsun ve provider injection mekanizmasını doğrudan kullanabiliyorsun.

konu hakkında tepkinizi verebilirsiniz