ExpressAdvanced
Express Testing (Jest + Supertest)
Unit test, API test, jest-super, test setup — Express app testing বাংলায়।
13টি অংশবাংলা ভাষায়
Testing কোড সঠিকভাবে কাজ করছে কিনা যাচাই করা। Express-এ Jest (test runner) + Supertest (HTTP test) সবচেয়ে জনপ্রিয়।
Install
npm install --save-dev jest supertestpackage.jsonjson
json
{
"scripts": {
"test": "jest --detectOpenHandles"
},
"jest": {
"testEnvironment": "node",
"testMatch": ["**/__tests__/**/*.test.js"]
}
}Separate App Export
app.jsjavascript
javascript
const express = require("express");
const app = express();
app.use(express.json());
app.use("/api/users", require("./routes/users"));
module.exports = app; // listen এখানে নেই!server.jsjavascript
javascript
const app = require("./app");
const connectDB = require("./config/db");
connectDB();
app.listen(process.env.PORT || 5000);API Test
__tests__/users.test.jsjavascript
javascript
const request = require("supertest");
const app = require("../app");
describe("Users API", () => {
test("GET /api/users → 200 ও array", async () => {
const res = await request(app).get("/api/users");
expect(res.statusCode).toBe(200);
expect(Array.isArray(res.body)).toBe(true);
});
test("POST /api/users → validation error", async () => {
const res = await request(app)
.post("/api/users")
.send({ name: "" }); // invalid
expect(res.statusCode).toBe(400);
});
test("POST /api/users → 201", async () => {
const res = await request(app)
.post("/api/users")
.send({ name: "রহিম", email: "r@test.com" });
expect(res.statusCode).toBe(201);
expect(res.body).toHaveProperty("_id");
});
});Unit Test (Middleware)
test auth middlewarejavascript
javascript
const { protect } = require("../middleware/auth");
describe("Auth middleware", () => {
test("token না থাকলে 401", () => {
const req = { headers: {} };
const res = { status: jest.fn().mockReturnThis(),
json: jest.fn() };
const next = jest.fn();
protect(req, res, next);
expect(res.status).toHaveBeenCalledWith(401);
expect(next).not.toHaveBeenCalled();
});
});npm test
# ✓ should pass — PASS/FAIL summary দেখাবেTesting Types
Unit test (এক ফাংশন), Integration test (API), E2E (full flow)। Express-এর জন্য Jest+Supertest যথেষ্ট শুরুতে।
শেষ প্যারায় নিজে practice করুন — কোড কপি করে নিজের এডিটরে চালিয়ে দেখুন।