JavaScript Docker के साथ इंटीग्रेशन टेस्टिंग: एडवांस्ड तकनीक

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

JavaScript Docker के साथ इंटीग्रेशन टेस्टिंग: थ्योरी से एडवांस्ड प्रैक्टिस तक

\n\n

इंटीग्रेशन टेस्टिंग डेवलपमेंट का एक बेहद ज़रूरी चरण है, जो विभिन्न मॉड्यूल्स और बाहरी सर्विसेज के बीच इंटरैक्शन की जाँच करता है। Node.js पर JavaScript एप्लिकेशन के लिए, Docker एक अनिवार्य टूल बन जाता है, जो टेस्टिंग के लिए अलग-थलग और दोबारा इस्तेमाल करने योग्य वातावरण बनाने में मदद करता है। इस आर्टिकल में हम Docker के साथ इंटीग्रेशन टेस्ट सेटअप करने की एडवांस्ड तकनीकों पर चर्चा करेंगे, जिसमें डेटाबेस, क्यू और CI/CD ऑप्टिमाइज़ेशन शामिल हैं।

\n\n

इंटीग्रेशन टेस्ट के लिए Docker क्यों?

\n\n

इंटीग्रेशन टेस्टिंग के पारंपरिक तरीके (mocks, stubs) हमेशा सिस्टम के असली व्यवहार को नहीं दिखाते। Docker इस समस्या को हल करता है:

\n\n
    \n
  • आइसोलेशन: हर टेस्ट एक साफ कंटेनर में चलता है, जिससे दूसरे टेस्ट या लोकल एनवायरनमेंट पर कोई असर नहीं पड़ता।
  • \n
  • रिप्रोड्यूसिबिलिटी: डेवलपर की मशीन और CI/CD में एक जैसी परिस्थितियाँ मिलती हैं।
  • \n
  • स्केलेबिलिटी: PostgreSQL, Redis, Elasticsearch जैसी डिपेंडेंसी के अलग-अलग वर्जन के साथ समानांतर टेस्ट चलाने की सुविधा।
  • \n
  • तेज़ रिकवरी: कंटेनर को दोबारा बनाने में सेकंड लगते हैं, घंटों सेटअप नहीं।
  • \n
\n\n

एडवांस्ड टेस्ट एनवायरनमेंट सेटअप

\n\n

एक सामान्य Node.js एप्लिकेशन लेते हैं जो PostgreSQL और Redis का उपयोग करता है। साधारण docker-compose.yml के बजाय, हम एक लचीला कॉन्फ़िगरेशन बनाएँगे जो समानांतर टेस्ट और health checks को सपोर्ट करता है।

\n\n

चरण 1: डायनामिक पोर्ट के साथ Docker Compose

\n\n

समानांतर टेस्ट में पोर्ट कॉन्फ्लिक्ट से बचने के लिए डायनामिक पोर्ट असाइनमेंट का उपयोग करें:

\n\n
# docker-compose.test.yml\nversion: '3.8'\nservices:\n  postgres_test:\n    image: postgres:15-alpine\n    environment:\n      POSTGRES_DB: test_db\n      POSTGRES_USER: test_user\n      POSTGRES_PASSWORD: test_pass\n    ports:\n      - "0:5432"  # डायनामिक पोर्ट\n    healthcheck:\n      test: ["CMD-SHELL", "pg_isready -U test_user -d test_db"]\n      interval: 2s\n      timeout: 5s\n      retries: 10\n    tmpfs: /var/lib/postgresql/data  # स्पीड के लिए RAM में डेटा\n\n  redis_test:\n    image: redis:7-alpine\n    ports:\n      - "0:6379"\n    healthcheck:\n      test: ["CMD", "redis-cli", "ping"]\n      interval: 2s\n      timeout: 5s\n      retries: 10
\n\n

चरण 2: Docker के साथ टेस्ट चलाने के लिए यूटिलिटी

\n\n

एक हेल्पर क्लास बनाएँ जो डायनामिक पोर्ट ढूँढे और सर्विसेज के तैयार होने का इंतज़ार करे:

\n\n
// test/setup/docker-manager.js\nconst { DockerComposeEnvironment, Wait } = require('testcontainers');\nconst { Client } = require('pg');\nconst Redis = require('ioredis');\n\nclass DockerTestManager {\n    constructor() {\n        this.environment = null;\n        this.config = {\n            pgPort: null,\n            redisPort: null\n        };\n    }\n\n    async start() {\n        this.environment = await new DockerComposeEnvironment(\n            '.', \n            'docker-compose.test.yml'\n        ).withWaitStrategy('postgres_test', Wait.forHealthCheck())\n         .withWaitStrategy('redis_test', Wait.forHealthCheck())\n         .up();\n\n        // पोर्ट मैपिंग निकालें\n        const pgContainer = this.environment.getContainer('postgres_test');\n        const redisContainer = this.environment.getContainer('redis_test');\n        \n        this.config.pgPort = pgContainer.getMappedPort(5432);\n        this.config.redisPort = redisContainer.getMappedPort(6379);\n        \n        return this.config;\n    }\n\n    async stop() {\n        if (this.environment) {\n            await this.environment.down();\n        }\n    }\n}\n\nmodule.exports = DockerTestManager;
\n\n

इंटीग्रेशन टेस्टिंग के एडवांस्ड सीनारियो

\n\n

अब हम ऐसे विशिष्ट टेस्ट पर आते हैं जो कंपोनेंट्स के वास्तविक इंटरैक्शन की जाँच करते हैं।

\n

ब्लॉग

पुस्तक अनुशंसाएँ