NestJSAdvanced
NestJS Testing
Jest setup, unit test, controller/service test, e2e — NestJS testing বাংলায়।
9টি অংশবাংলা ভাষায়
NestJS CLI দিয়ে test files ready তৈরি হয় — Jest (unit) ও Supertest (e2e) built-in।
Unit Test — Service
users.service.spec.tstypescript
typescript
import { Test } from "@nestjs/testing";
import { UsersService } from "./users.service";
describe("UsersService", () => {
let service: UsersService;
beforeEach(async () => {
const moduleRef = await Test.createTestingModule({
providers: [UsersService],
}).compile();
service = moduleRef.get<UsersService>(UsersService);
});
it("সব users দেয়", () => {
const users = service.findAll();
expect(users).toHaveLength(2);
});
it("not found-এ exception", () => {
expect(() => service.findOne(999)).toThrow();
});
});Unit Test — Controller (mock dependencies)
users.controller.spec.tstypescript
typescript
import { Test } from "@nestjs/testing";
import { UsersController } from "./users.controller";
import { UsersService } from "./users.service";
describe("UsersController", () => {
let controller: UsersController;
let service: { findAll: jest.Mock };
beforeEach(async () => {
service = {
findAll: jest.fn().mockResolvedValue([{ id: 1, name: "রহিম" }]),
};
const moduleRef = await Test.createTestingModule({
controllers: [UsersController],
providers: [{ provide: UsersService, useValue: service }],
}).compile();
controller = moduleRef.get<UsersController>(UsersController);
});
it("findAll ডাকা হয়", async () => {
await controller.findAll();
expect(service.findAll).toHaveBeenCalled();
});
});E2E Test
test/app.e2e-spec.tstypescript
typescript
import { Test, TestingModule } from "@nestjs/testing";
import { INestApplication } from "@nestjs/common";
import * as request from "supertest";
import { AppModule } from "../src/app.module";
describe("App (e2e)", () => {
let app: INestApplication;
beforeAll(async () => {
const moduleFixture: TestingModule = await Test.createTestingModule({
imports: [AppModule],
}).compile();
app = moduleFixture.createNestApplication();
await app.init();
});
afterAll(async () => {
await app.close();
});
it("GET / → Hello", () => {
return request(app.getHttpServer())
.get("/")
.expect(200)
.expect(/Hello World/);
});
it("POST /users → validation fails", () => {
return request(app.getHttpServer())
.post("/users")
.send({ name: "" })
.expect(400);
});
});npm test # unit tests
npm run test:e2e # end-to-end
npm run test:cov # coverage reportTesting Principle
Unit test-এ external dependency (DB, HTTP) mock করুন। E2E-এ পূর্ণ app-এর মধ্য দিয়ে request পাঠান। Coverage 80%+ রাখার চেষ্টা করুন।
শেষ প্যারায় নিজে practice করুন — কোড কপি করে নিজের এডিটরে চালিয়ে দেখুন।