TypeScript के साथ Docker एकीकरण परीक्षण: संपूर्ण मार्गदर्शिका

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

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

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

TypeScript के साथ Docker एकीकरण परीक्षण: A से Z तक

\n\n

TypeScript पर आधुनिक विकास के लिए न केवल गुणवत्तापूर्ण यूनिट परीक्षण की आवश्यकता है, बल्कि वास्तविक परिस्थितियों में घटकों की परस्पर क्रिया की जाँच भी आवश्यक है। Docker का उपयोग करके एकीकरण परीक्षण आपको डेटाबेस, कैश और अन्य सेवाओं के साथ पृथक वातावरण स्थापित करने की अनुमति देता है, जो परीक्षणों को production के सबसे करीब बनाता है। इस लेख में, हम समझेंगे कि Docker का उपयोग करके TypeScript अनुप्रयोग के एकीकरण परीक्षण को कैसे सेटअप किया जाए, REST API के लिए परीक्षण लिखें और सर्वोत्तम प्रथाओं पर विचार करें।

\n\n

एकीकरण परीक्षण के लिए Docker क्यों?

\n\n

Docker एकीकरण परीक्षणों की मुख्य समस्याओं में से एक को हल करता है - बाहरी सेवाओं पर निर्भरता। एक सामान्य डेटाबेस या Redis का उपयोग करने के बजाय, जो अन्य डेवलपर्स द्वारा उपयोग किए जा सकते हैं, हम प्रत्येक परीक्षण रन के लिए पृथक कंटेनर स्थापित करते हैं। यह सुनिश्चित करता है:

\n\n
    \n
  • परीक्षणों की शुद्धता: प्रत्येक रन एक खाली अवस्था से शुरू होता है
  • \n
  • पुनरावृत्ति क्षमता: परीक्षण किसी भी मशीन पर समान रूप से काम करते हैं
  • \n
  • पृथक्करण: परीक्षण एक-दूसरे और production डेटा को प्रभावित नहीं करते
  • \n
  • गति: कंटेनर सेकंडों में स्थापित हो जाते हैं
  • \n
\n\n

प्रोजेक्ट और Docker Compose सेटअप

\n\n

Express और PostgreSQL के साथ एक सरल TypeScript प्रोजेक्ट बनाएं। हमारा कार्य उपयोगकर्ता निर्माण एंडपॉइंट का परीक्षण करना है। docker-compose.test.yml फ़ाइल से शुरू करें:

\n\n
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 बनाएं:

\n\n
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\n

Jest और Supertest के साथ एकीकरण परीक्षण लिखना

\n\n

आवश्यक पैकेज स्थापित करें:

\n\n
npm install --save-dev jest @types/jest ts-jest supertest @types/supertest
\n\n

Jest कॉन्फ़िगरेशन बनाएं (jest.config.ts):

\n\n
export default {\n  preset: 'ts-jest',\n  testEnvironment: 'node',\n  testMatch: ['**/__tests__/**/*.test.ts'],\n  setupFilesAfterSetup: ['./jest.setup.ts'],\n  testTimeout: 30000,\n};
\n\n

jest.setup.ts फ़ाइल Docker कंटेनरों को शुरू और रोकने के लिए जिम्मेदार होगी:

\n\n
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 फ़ाइल बनाएं:

\n\n
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                

ब्लॉग

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