डॉकर के साथ जावास्क्रिप्ट इंटीग्रेशन टेस्टिंग: उन्नत स्तर
\n\nइंटीग्रेशन टेस्टिंग आधुनिक वेब एप्लिकेशन विकास का एक महत्वपूर्ण चरण है। यह सिस्टम के विभिन्न घटकों: डेटाबेस, कैश, बाहरी API और एप्लिकेशन के बीच इंटरैक्शन की जांच करने की अनुमति देता है। Docker इस प्रक्रिया को पूर्वानुमानित, पृथक और पुनरुत्पादनीय बनाता है। इस लेख में, हम Docker का उपयोग करके जावास्क्रिप्ट (Node.js) इंटीग्रेशन टेस्टिंग की उन्नत तकनीकों पर चर्चा करेंगे।
\n\nइंटीग्रेशन टेस्टिंग में Docker क्यों?
\nपारंपरिक इंटीग्रेशन टेस्टिंग को इन समस्याओं का सामना करना पड़ता है:
\n- \n
- डेवलपर, CI और प्रोडक्शन एनवायरनमेंट में अंतर। \n
- साझा डेटाबेस में डेटा का दूषित होना। \n
- निर्भरताओं (Redis, PostgreSQL, Kafka) को चलाने में कठिनाई। \n
Docker हल्के, पृथक कंटेनर प्रदान करके इन समस्याओं का समाधान करता है। प्रत्येक परीक्षण अपना स्वयं का बुनियादी ढांचा चला सकता है, और समाप्त होने पर उसे नष्ट कर सकता है। यह परिणामों की शुद्धता और पुनरावृत्ति सुनिश्चित करता है।
\n\nDocker Compose के साथ टेस्ट एनवायरनमेंट सेटअप करना
\nउन्नत परीक्षण के लिए, हम docker-compose.yml का उपयोग करेंगे, जो परीक्षणों के लिए आवश्यक सभी सेवाओं का वर्णन करता है: एप्लिकेशन, डेटाबेस, कैश और मॉक-सर्वर।
उदाहरण docker-compose.test.yml:
\nversion: '3.8'\nservices:\n app:\n build: .\n environment:\n - NODE_ENV=test\n - DB_HOST=postgres_test\n - REDIS_HOST=redis_test\n - MOCK_SERVER_URL=http://mock-server:8080\n depends_on:\n - postgres_test\n - redis_test\n - mock-server\n command: ["npm", "run", "test:integration"]\n\n postgres_test:\n image: postgres:15-alpine\n environment:\n POSTGRES_DB: testdb\n POSTGRES_USER: test\n POSTGRES_PASSWORD: test\n tmpfs: /var/lib/postgresql/data\n\n redis_test:\n image: redis:7-alpine\n tmpfs: /data\n\n mock-server:\n image: mockserver/mockserver:latest\n environment:\n MOCKSERVER_LOG_LEVEL: ERROR\n\n\nमुख्य बिंदु:
\n- \n
- tmpfs: DB और Redis डेटा RAM में संग्रहीत होता है, जिससे परीक्षण तेज़ होते हैं। \n
- mock-server: बाहरी API के अनुकरण के लिए पृथक सेवा। \n
- NODE_ENV=test: एप्लिकेशन को टेस्ट कॉन्फ़िगरेशन पर स्विच करता है। \n
Testcontainers के साथ इंटीग्रेशन टेस्ट लिखना
\nNode.js के लिए testcontainers लाइब्रेरी आपको सीधे परीक्षणों से प्रोग्रामेटिक रूप से कंटेनरों को प्रबंधित करने की अनुमति देती है। यह लचीलापन प्रदान करता है: आप प्रत्येक परीक्षण सेट के लिए विशिष्ट कंटेनर चला सकते हैं।
\n\nस्थापना:
\nnpm install --save-dev testcontainers\n\nPostgreSQL के साथ परीक्षण का उदाहरण:
\nconst { GenericContainer } = require('testcontainers');\nconst { Client } = require('pg');\n\ndescribe('User Repository Integration Test', () => {\n let container;\n let client;\n\n beforeAll(async () => {\n // PostgreSQL कंटेनर शुरू करें\n container = await new GenericContainer('postgres:15-alpine')\n .withEnvironment({\n POSTGRES_DB: 'testdb',\n POSTGRES_USER: 'test',\n POSTGRES_PASSWORD: 'test'\n })\n .withExposedPorts(5432)\n .start();\n\n // कंटेनर से कनेक्ट करें\n client = new Client({\n host: container.getHost(),\n port: container.getMappedPort(5432),\n database: 'testdb',\n user: 'test',\n password: 'test'\n });\n await client.connect();\n\n // स्कीमा बनाएँ\n await client.query(`\n CREATE TABLE users (\n id SERIAL PRIMARY KEY,\n name VARCHAR(100),\n email VARCHAR(100) UNIQUE\n )\n `);\n });\n\n afterAll(async () => {\n await client.end();\n await container.stop();\n });\n\n test('should insert and retrieve user', async () => {\n await client.query(\n