pgmock डेमो — Discord
pgmock यूनिट और E2E टेस्टिंग के लिए एक in-memory PostgreSQL mock server है.
- इसमें कोई external dependency नहीं है और यह Node.js तथा browser, दोनों में WebAssembly के भीतर पूरी तरह चलता है.
इंस्टॉलेशन
npm install pgmock कमांड से इसे इंस्टॉल किया जा सकता है.
- अगर आप browser में
pgmock चलाना चाहते हैं, तो browser support सेक्शन में दिए गए विस्तृत निर्देश देखें.
शुरुआत
- in-memory server को इस तरह चलाया जा सकता है:
import { PostgresMock } from "pgmock";
const mock = await PostgresMock.create();
const connectionString = await mock.listen(5432);
- अगर आप
node-postgres (npm पर pg) का उपयोग कर रहे हैं, तो यह port का उपयोग किए बिना browser में भी काम करने वाला config object देता है:
import * as pg from "pg";
const mock = await PostgresMock.create();
const client = new pg.Client(mock.getNodePostgresConfig());
await client.connect();
console.log(await client.query('SELECT $1::text as message', ['Hello world!']));
- उपयोग के बाद resources मुक्त करने के लिए mock server को destroy करना अच्छा अभ्यास है:
mock.destroy();
दस्तावेज़ीकरण
- उपलब्ध सभी methods और उनके documentation की सूची के लिए PostgresMock source file देखें.
browser support
pgmock browser environment को पूरी तरह support करता है.
- web app TCP ports पर listen नहीं कर सकता, लेकिन
PostgresMock.createSocket और node-postgres config का उपयोग किया जा सकता है.
- यदि bundler static imports का analysis करता है, तो missing (optional) Node.js modules के कारण default config में warnings दिख सकती हैं.
- अगर आप browser में सिर्फ database चलाना चाहते हैं, तो
pglite पर विचार कर सकते हैं, हालांकि इसकी functionality सीमित है.
pgmock को test environment में उस production PostgreSQL environment के साथ functional equivalence लक्ष्य में रखकर डिज़ाइन किया गया है, जिसे आप चाहते हैं.
यह कैसे काम करता है
- WebAssembly में Postgres चलाने के दो तरीके हैं: या तो WASM के native support के लिए fork किया जाए, या x86 emulator में Postgres server को emulate किया जाए.
- पहला तरीका बेहतर performance और कम memory usage देता है, लेकिन single-user mode (बिना connections) और extensions को support नहीं करता.
- क्योंकि test और production के बीच अंतर से बचना ज़रूरी है और tests में performance मुख्य चिंता नहीं है, इसलिए
pgmock अभी दूसरे तरीके का उपयोग करता है.
- मध्यम अवधि में, जब native Postgres WASM fork परिपक्व हो जाएगा, तो दोनों विकल्प देने और अंततः default रूप से native WASM पर जाने की योजना है.
PostgresMock.subtle के अंदर के APIs को छोड़कर, बहुत अधिक बदलाव होने की उम्मीद नहीं है.
pgmock JavaScript के भीतर एक network stack simulate करता है जो वास्तविक network की तरह व्यवहार करता है, ताकि raw socket access की अनुमति न देने वाले platforms पर भी TCP connections simulate किए जा सकें, और network proxy पर निर्भर हुए बिना पूरी functional compatibility पूरी तरह JavaScript runtime के भीतर उपलब्ध कराई जा सके.
योगदान करना चाहते हैं?
- आप Discord server पर हमसे बात कर सकते हैं.
क्या अन्य Docker images या databases चलाए जा सकते हैं?
- सैद्धांतिक रूप से हाँ. यदि रुचि हो, तो Discord server पर संपर्क करें.
आभार
- इसे संभव बनाने वाले x86 emulator v86 का धन्यवाद.
- WebAssembly के भीतर Postgres चलाने का अपना तरीका बनाने वाले Supabase & Snaplet का धन्यवाद.
pgmock बनाते समय वेतन देने के लिए Stackframe का धन्यवाद.
GN⁺ की राय
pgmock उन developers के लिए उपयोगी tool है जो PostgreSQL database के साथ interaction की testing करना चाहते हैं. यह वास्तविक database server को setup और manage करने की झंझट के बिना आपके code के database interactions को validate करने देता है.
- ऐसे tools test-driven development (TDD) या continuous integration (CI) environments में बहुत उपयोगी होते हैं. developers तेज़ी से tests चला सकते हैं और code changes के प्रभाव को तुरंत देख सकते हैं.
pgmock WebAssembly का उपयोग करता है, इसलिए यह browser और Node.js, दोनों environments में काम करता है, जिससे अलग-अलग development environments में compatibility मिलती है. इसका लाभ frontend और backend developers, दोनों को मिलता है.
- हालांकि, यह सवाल बना रहता है कि क्या
pgmock वास्तविक PostgreSQL server की सभी capabilities को पूरी तरह emulate कर सकता है, खासकर performance और extension support के मामले में. वास्तविक database environment से अंतर test results को प्रभावित कर सकता है.
- मिलते-जुलते features देने वाले अन्य projects में Testcontainers और H2 Database शामिल हैं; ये क्रमशः Docker containers का उपयोग करने वाली integration testing और Java applications के लिए in-memory database उपलब्ध कराते हैं.
1 टिप्पणियां
Hacker News की राय
pgmock का परिचय
RAM disk पर Postgres चलाने को लेकर सवाल
असल server की जगह in-memory server इस्तेमाल करने का अनुभव साझा
प्रोजेक्ट की intellectual property पर सवाल
development environment की नकल बनाने पर सलाह
pgmock के development background और CI integration पर सवाल
H2 database से तुलना का सवाल
pgmem इस्तेमाल करने का अनुभव साझा
ORM support पर सवाल
Prisma client के साथ इस्तेमाल की संभावना पर सवाल