Node নিজের test runner built in নিয়ে আসে — node:test — তাই একটি প্রথম আসল test-এর জন্য কোনো অতিরিক্ত package লাগে না। (Jest আর Vitest-এর মতো জনপ্রিয় external runner একই মূল ধারণার উপর অতিরিক্ত feature যোগ করে, পরে explore করার যোগ্য।)
// math.test.js
import { test } from 'node:test'
import assert from 'node:assert'
function add(a, b) {
return a + b
}
test('add() sums two numbers', () => {
assert.strictEqual(add(2, 3), 5)
})node --test
# ✔ add() sums two numbersimport { describe, test } from 'node:test'
import assert from 'node:assert'
describe('add()', () => {
test('sums two positive numbers', () => {
assert.strictEqual(add(2, 3), 5)
})
test('handles negative numbers', () => {
assert.strictEqual(add(-2, 3), 1)
})
})test('fetches a user', async () => {
const user = await getUser(1)
assert.strictEqual(user.name, 'Sam')
})একটি real port-এ একটি আসল server শুরু করার বদলে, সরাসরি একটি Express app call করতে পারে এমন একটি request library (যেমন supertest) কোনো network ছাড়াই route test করে।
import { test } from 'node:test'
import assert from 'node:assert'
import request from 'supertest'
import app from './app.js'
test('GET /products returns a list', async () => {
const response = await request(app).get('/products')
assert.strictEqual(response.status, 200)
assert.ok(Array.isArray(response.body))
})| Method | Check করে |
|---|---|
| assert.strictEqual(a, b) | a === b |
| assert.deepStrictEqual(a, b) | a আর b-র একই structure/মান আছে (object আর array-র জন্য) |
| assert.ok(value) | value truthy |
| assert.throws(fn) | fn call করলে একটি error throw হয় |
| assert.rejects(promise) | একটি async function-এর return করা promise reject হয় |
Failure case-ও test করুন
একটি test suite যা শুধু "happy path" (বৈধ input, success case) ব্যায়াম করে বেশিরভাগ আসল bug মিস করে — খারাপ input, একটি missing field, বা কোডের গভীরে throw হওয়া একটি error দিয়ে কী হওয়া উচিত তার জন্য ইচ্ছাকৃতভাবে অন্তত একটি test লিখুন।