TypeScript के साथ Docker एकीकरण परीक्षण: A से Z तक
\n\nTypeScript पर आधुनिक विकास के लिए न केवल गुणवत्तापूर्ण यूनिट परीक्षण की आवश्यकता है, बल्कि वास्तविक परिस्थितियों में घटकों की परस्पर क्रिया की जाँच भी आवश्यक है। Docker का उपयोग करके एकीकरण परीक्षण आपको डेटाबेस, कैश और अन्य सेवाओं के साथ पृथक वातावरण स्थापित करने की अनुमति देता है, जो परीक्षणों को production के सबसे करीब बनाता है। इस लेख में, हम समझेंगे कि Docker का उपयोग करके TypeScript अनुप्रयोग के एकीकरण परीक्षण को कैसे सेटअप किया जाए, REST API के लिए परीक्षण लिखें और सर्वोत्तम प्रथाओं पर विचार करें।
\n\nएकीकरण परीक्षण के लिए Docker क्यों?
\n\nDocker एकीकरण परीक्षणों की मुख्य समस्याओं में से एक को हल करता है - बाहरी सेवाओं पर निर्भरता। एक सामान्य डेटाबेस या Redis का उपयोग करने के बजाय, जो अन्य डेवलपर्स द्वारा उपयोग किए जा सकते हैं, हम प्रत्येक परीक्षण रन के लिए पृथक कंटेनर स्थापित करते हैं। यह सुनिश्चित करता है:
\n\n- \n
- परीक्षणों की शुद्धता: प्रत्येक रन एक खाली अवस्था से शुरू होता है \n
- पुनरावृत्ति क्षमता: परीक्षण किसी भी मशीन पर समान रूप से काम करते हैं \n
- पृथक्करण: परीक्षण एक-दूसरे और production डेटा को प्रभावित नहीं करते \n
- गति: कंटेनर सेकंडों में स्थापित हो जाते हैं \n
प्रोजेक्ट और Docker Compose सेटअप
\n\nExpress और PostgreSQL के साथ एक सरल TypeScript प्रोजेक्ट बनाएं। हमारा कार्य उपयोगकर्ता निर्माण एंडपॉइंट का परीक्षण करना है। docker-compose.test.yml फ़ाइल से शुरू करें:
version: '3.8'\nservices:\n db_test:\n image: postgres:15-alpine\n environment:\n POSTGRES_DB: testdb\n POSTGRES_USER: testuser\n POSTGRES_PASSWORD: testpass\n ports:\n - "5433:5432"\n healthcheck:\n test: ["CMD-SHELL", "pg_isready -U testuser -d testdb"]\n interval: 5s\n timeout: 5s\n retries: 5\n\n app_test:\n build:\n context: .\n dockerfile: Dockerfile.test\n environment:\n DATABASE_URL: postgres://testuser:testpass@db_test:5432/testdb\n NODE_ENV: test\n ports:\n - "3001:3000"\n depends_on:\n db_test:\n condition: service_healthy\n\nअब TypeScript अनुप्रयोग को बिल्ड करने के लिए Dockerfile.test बनाएं:
FROM node:18-alpine\nWORKDIR /app\nCOPY package*.json ./\nRUN npm ci --only=production\nCOPY . .\nRUN npm run build\nCMD ["node", "dist/index.js"]\n\nJest और Supertest के साथ एकीकरण परीक्षण लिखना
\n\nआवश्यक पैकेज स्थापित करें:
\n\nnpm install --save-dev jest @types/jest ts-jest supertest @types/supertest\n\nJest कॉन्फ़िगरेशन बनाएं (jest.config.ts):
export default {\n preset: 'ts-jest',\n testEnvironment: 'node',\n testMatch: ['**/__tests__/**/*.test.ts'],\n setupFilesAfterSetup: ['./jest.setup.ts'],\n testTimeout: 30000,\n};\n\njest.setup.ts फ़ाइल Docker कंटेनरों को शुरू और रोकने के लिए जिम्मेदार होगी:
import { execSync, spawn } from 'child_process';\nimport path from 'path';\n\nconst composeFile = path.resolve(__dirname, '../docker-compose.test.yml');\n\nbeforeAll(async () => {\n // कंटेनर स्थापित करें\n execSync(`docker-compose -f ${composeFile} up -d --build`, { stdio: 'inherit' });\n \n // एप्लिकेशन उपलब्ध होने तक प्रतीक्षा करें\n await new Promise((resolve) => setTimeout(resolve, 5000));\n});\n\nafterAll(async () => {\n // कंटेनर रोकें और हटाएं\n execSync(`docker-compose -f ${composeFile} down -v`, { stdio: 'inherit' });\n});\n\nअब परीक्षण लिखें। __tests__/users.test.ts फ़ाइल बनाएं:
import request from 'supertest';\n\nconst BASE_URL = 'http://localhost:3001/api';\n\ndescribe('Users API Integration Tests', () => {\n const testUser = {\n name: 'इवान इवानोव',\n email: 'ivan@example.com',\n password: 'securePass123'\n };\n\n