परिचय: TypeScript के साथ Docker एकीकरण परीक्षण क्यों आवश्यक है?
एकीकरण परीक्षण विकास का एक महत्वपूर्ण चरण है जो आपके एप्लिकेशन के विभिन्न मॉड्यूल के बीच परस्पर क्रिया की जाँच करता है। यूनिट परीक्षणों के विपरीत, जो एक घटक को अलग करते हैं, एकीकरण परीक्षण यह जाँचते हैं कि डेटाबेस, API, बाहरी सेवाएँ और व्यावसायिक तर्क एक साथ कैसे काम करते हैं।
TypeScript एकीकरण परीक्षण में Docker का उपयोग कई समस्याओं का समाधान करता है:
- पर्यावरण का अलगाव — परीक्षण सभी मशीनों पर समान परिस्थितियों में चलते हैं
- निर्भरता प्रबंधन — डेटाबेस, कतारें और कैश स्वचालित रूप से शुरू होते हैं
- पुनरुत्पादन क्षमता — परीक्षण स्थानीय और CI/CD में समान परिणाम देते हैं
- त्वरित पुनर्प्राप्ति — कंटेनर सेकंडों में पुनः बनाए जाते हैं
इस लेख में, हम Docker, Jest और Supertest का उपयोग करके TypeScript एप्लिकेशन के एकीकरण परीक्षण सेटअप के एक व्यावहारिक उदाहरण पर चर्चा करेंगे।
1. प्रोजेक्ट तैयार करना और निर्भरताएँ स्थापित करना
एक बुनियादी TypeScript प्रोजेक्ट बनाकर शुरू करें। सुनिश्चित करें कि आपके पास Node.js (v18+) और Docker स्थापित हैं।
mkdir typescript-docker-testingcd typescript-docker-testingnpm init -ynpm install express typescript ts-node @types/node @types/expressnpm install --save-dev jest ts-jest @types/jest supertest @types/supertesttsconfig.json बनाएँ:
{ "compilerOptions": { "target": "ES2020", "module": "commonjs", "outDir": "./dist", "rootDir": "./src", "strict": true, "esModuleInterop": true, "skipLibCheck": true }, "include": ["src/**/*"], "exclude": ["node_modules", "**/*.test.ts"]}package.json में Jest कॉन्फ़िगर करें:
"jest": { "preset": "ts-jest", "testEnvironment": "node", "testMatch": ["**/*.test.ts"]}2. एक सरल Express एप्लिकेशन बनाना
फ़ोल्डर संरचना और एक सरल एप्लिकेशन बनाएँ जो PostgreSQL डेटाबेस के साथ इंटरैक्ट करेगा।
mkdir srcmkdir src/configmkdir src/modelsmkdir src/routesmkdir src/__tests__src/config/database.ts — डेटाबेस कनेक्शन कॉन्फ़िगरेशन:
import { Pool } from 'pg';
const pool = new Pool({ host: process.env.DB_HOST || 'localhost', port: Number(process.env.DB_PORT) || 5432, database: process.env.DB_NAME || 'testdb', user: process.env.DB_USER || 'testuser', password: process.env.DB_PASSWORD || 'testpass'});
export default pool;src/app.ts — मुख्य एप्लिकेशन:
import express from 'express';import userRoutes from './routes/users';
const app = express();app.use(express.json());app.use('/api/users', userRoutes);
export default app;src/index.ts — प्रवेश बिंदु:
import app from './app';
const PORT = process.env.PORT || 3000;app.listen(PORT, () => { console.log(`Server running on port ${PORT}`);});src/routes/users.ts — उपयोगकर्ताओं के लिए सरल रूट:
import { Router, Request, Response } from 'express';import pool from '../config/database';
const router = Router();
router.get('/', async (req: Request, res: Response) => { try { const result = await pool.query('SELECT * FROM users'); res.json(result.rows); } catch (error) { res.status(500).json({ error: 'Database error' }); }});
router.post('/', async (req: Request, res: Response) => { const { name, email } = req.body; try { const result = await pool.query( 'INSERT INTO users (name, email) VALUES ($1, $2) RETURNING *', [name, email] ); res.status(201).json(result.r