TypeScript के साथ Docker का एकीकरण परीक्षण: उन्नत स्तर
\n\nएकीकरण परीक्षण आधुनिक TypeScript अनुप्रयोगों के विकास में एक महत्वपूर्ण चरण है। जब आपका सिस्टम कई माइक्रोसर्विसेज, डेटाबेस, संदेश कतारों और बाहरी API से बना होता है, तो पृथक unit-परीक्षण वास्तविक इंटरैक्शन परिदृश्यों को कवर नहीं कर पाते। Docker आपको उत्पादन के करीब, प्रतिलिपि योग्य, पृथक वातावरण बनाने की अनुमति देता है। इस लेख में, हम Docker का उपयोग करके TypeScript अनुप्रयोगों के एकीकरण परीक्षण की उन्नत तकनीकों पर विचार करेंगे: कंटेनरों की स्थापना से लेकर CI/CD पाइपलाइनों के निर्माण तक।
\n\nDocker TypeScript एकीकरण परीक्षणों के लिए एक आदर्श उपकरण क्यों है
\n\nएकीकरण परीक्षण के पारंपरिक दृष्टिकोण अक्सर वातावरण संबंधी समस्याओं से ग्रस्त होते हैं: "यह मेरी मशीन पर काम करता है"। Docker इस समस्या को हल करता है, प्रदान करता है:
\n\n- \n
- पृथक्करण — प्रत्येक परीक्षण एक साफ कंटेनर में चलता है, अन्य प्रक्रियाओं को प्रभावित किए बिना \n
- प्रतिलिपि योग्यता — सभी चरणों में समान वातावरण: स्थानीय रूप से, CI में, staging पर \n
- गति — हल्के कंटेनर सेकंडों में शुरू हो जाते हैं \n
- लचीलापन — DB, कैश, कतारों के विभिन्न संस्करणों को आसानी से संयोजित करें \n
TypeScript परियोजनाओं के लिए, Docker विशेष रूप से उपयोगी है क्योंकि यह न केवल Node.js रनटाइम का परीक्षण करने की अनुमति देता है, बल्कि TypeScript कंपाइलर, ट्रांसपिलेशन और बिल्ड के साथ इंटरैक्शन का भी परीक्षण करता है।
\n\nTypeScript परीक्षणों के लिए Docker वातावरण की स्थापना
\n\nआइए मूल कॉन्फ़िगरेशन से शुरू करें। प्रोडक्शन बिल्ड के लिए और परीक्षणों के लिए अलग Dockerfile बनाएं:
# Dockerfile.test\nFROM node:18-alpine AS builder\n\nWORKDIR /app\nCOPY package*.json ./\nRUN npm ci\nCOPY tsconfig.json ./\nCOPY src/ ./src/\n\n# TypeScript बिल्ड\nRUN npm run build\n\n# परीक्षणों के लिए चरण\nFROM node:18-alpine AS test-runner\nWORKDIR /app\nCOPY --from=builder /app/dist ./dist\nCOPY --from=builder /app/node_modules ./node_modules\nCOPY --from=builder /app/package.json ./\nCOPY tests/ ./tests/\nCOPY jest.config.ts ./\n\n# एकीकरण परीक्षण चलाएं\nCMD ["npx", "jest", "--config", "jest.config.ts", "--testMatch", "**/*.integration.test.ts"]\n\nकई सेवाओं के प्रबंधन के लिए docker-compose.yml का उपयोग करें:
version: '3.8'\nservices:\n app:\n build:\n context: .\n dockerfile: Dockerfile.test\n depends_on:\n postgres:\n condition: service_healthy\n redis:\n condition: service_healthy\n environment:\n - DB_HOST=postgres\n - DB_PORT=5432\n - REDIS_HOST=redis\n - REDIS_PORT=6379\n volumes:\n - ./tests:/app/tests:ro\n networks:\n - test-network\n\n postgres:\n image: postgres:15-alpine\n environment:\n POSTGRES_DB: testdb\n POSTGRES_USER: testuser\n POSTGRES_PASSWORD: testpass\n healthcheck:\n test: ["CMD-SHELL", "pg_isready -U testuser -d testdb"]\n interval: 5s\n timeout: 5s\n retries: 5\n networks:\n - test-network\n\n redis:\n image: redis:7-alpine\n healthcheck:\n test: ["CMD", "redis-cli", "ping"]\n interval: 5s\n timeout: 3s\n retries: 5\n networks:\n - test-network\n\nnetworks:\n test-network:\n driver: bridge\n\nTypeScript में उन्नत एकीकरण परीक्षण लिखना
\n\nअब एक परीक्षण बनाएं जो पूर्ण परिदृश्य की जांच करता है: DB में लेखन, Redis में कैशिंग, और कतार में ईवेंट भेजना। TypeScript कोड से कंटेनरों के गतिशील प्रबंधन के लिए testcontainers लाइब्रेरी का उपयोग करें:
// tests/integration/user-registration.integration.test.ts\nimport { GenericContainer, StartedTestContainer, Wait } from 'testcontainers';\nimport { PostgreSqlContainer } from '@testcontainers/postgresql';\nimport { RedisContainer } from '@testcontainers/redis';\nimport axi