सुनो, आज मैं फिक्स्चर के बारे में बात करना चाहता हूं, यदि आप नाटककार के साथ काम करने जा रहे हैं और आप अपने परीक्षणों के बीच डेटा साझा करना चाहते हैं या कस्टम निष्पादन बनाना चाहते हैं तो यह एक महत्वपूर्ण मित्र है। आइए एक साधारण उदाहरण से शुरू करें। test('should win the player "X"', async ({ page }) => { await page.goto("/"); await page.locator("button:nth-child(1)").click(); await page.locator("button:nth-child(5)").click(); await page.locator("button:nth-child(6)").click(); await page.locator("button:nth-child(7)").click(); await page.locator("button:nth-child(3)").click(); await page.locator("button:nth-child(9)").click(); await page.locator("button:nth-child(2)").click(); const winnerParagraph = await page.getByText(/winner/i); await expect(winnerParagraph).toContainText("X"); }); कल्पना कीजिए कि आप इस परीक्षण को दोहराने के लिए सरणी में बटनों के सभी अनुक्रमणिका निकालना चाहते हैं और इन सभी क्लिक आदेशों को छोटा परीक्षण करने के लिए कम करना चाहते हैं। तो, स्थिरता सुविधा शुरू करने से पहले पहला रिफ्लेक्टर यह हो सकता है। test('should win the player "X"', async ({ page }) => { const playerXWinMoves = [1, 5, 6, 7, 3, 9, 2]; for (const move of playerXWinMoves) { await page.locator(`button:nth-child(${move})`).click(); } const winnerParagraph = await page.getByText(/winner/i); await expect(winnerParagraph).toContainText("X"); }); जैसा कि आप देख सकते हैं, खिलाड़ियों की चालों को पुन: उत्पन्न करने के लिए सभी चरण वेरिएबल्स में निहित हैं। परीक्षण संक्षिप्त है, लेकिन सबसे महत्वपूर्ण, सभी क्रियाएं एक ही चर में हैं। अब जुड़नार पेश करने का समय आ गया है। playerXWinMoves आगे बढ़ने से पहले, मुझे यह बताने में कुछ शब्द खर्च करने दीजिए कि जुड़नार क्या हैं। क्या जुगत हैं परीक्षण जुड़नार का उपयोग प्रत्येक परीक्षण के लिए एक वातावरण स्थापित करने के लिए किया जाता है, परीक्षण को वह सब कुछ देता है जिसकी उसे आवश्यकता होती है और कुछ नहीं। परीक्षण जुड़नार परीक्षणों के बीच अलग-थलग हैं। जुड़नार के साथ, आप उनके मानक सेटअप के बजाय उनके अर्थ के आधार पर परीक्षण कर सकते हैं। इस परिभाषा के बाद, आप सोच सकते हैं कि जुड़नार को हुक से पहले / बाद में बदला जा सकता है, लेकिन इन हुक पर जुड़नार के कई फायदे हैं: फिक्स्चर एक ही स्थान पर सेटअप और टियरडाउन को , जिससे लिखना आसान हो जाता है। समाहित करते हैं परीक्षण फ़ाइलों के बीच फिक्स्चर हैं - आप उन्हें एक बार परिभाषित कर सकते हैं और अपने सभी परीक्षणों में उनका उपयोग कर सकते हैं। प्लेराइट का बिल्ट-इन फिक्सचर इसी तरह काम करता है। पुन: प्रयोज्य page फिक्स्चर हैं - आप जितने चाहें उतने फिक्स्चर परिभाषित कर सकते हैं, और प्लेराइट टेस्ट केवल आपके टेस्ट के लिए आवश्यक सेट करेगा और कुछ नहीं। ऑन-डिमांड जुड़नार हैं - वे जटिल व्यवहार प्रदान करने के लिए एक दूसरे पर निर्भर हो सकते हैं। रचना योग्य जुड़नार होते हैं। परीक्षण फिक्स्चर के किसी भी संयोजन का उपयोग कर सकते हैं ताकि अन्य परीक्षणों को प्रभावित किए बिना उन्हें सटीक वातावरण की आवश्यकता हो। लचीले जुड़नार आसान बनाते हैं। अब आपको उन परीक्षणों को में लपेटने की आवश्यकता नहीं है जो एक वातावरण स्थापित करते हैं और इसके बजाय अपने परीक्षणों को उनके अर्थ के अनुसार समूहित करने के लिए स्वतंत्र हैं। समूहीकरण को describe बिल्कुल सही, इस उबाऊ सिद्धांत भाग के बाद, नाटककार में जुड़नार के साथ अपने हाथों को गंदा करने का समय आ गया है। स्पष्टीकरण शुरू करने के लिए, मैं अंतिम परिणाम से शुरू करना चाहता हूं। import { expect, test as base } from "@playwright/test"; type TestFixtures = { playerXWinMoves: [number, number, number, number, number, number, number]; }; const test = base.extend<TestFixtures>({ playerXWinMoves: async ({}, use) => { await use([1, 5, 6, 7, 3, 9, 2]); }, }); test('should win the player "X"', async ({ page, playerXWinMoves }) => { for (const move of playerXWinMoves) { await page.locator(`button:nth-child(${move})`).click(); } const winnerParagraph = await page.getByText(/winner/i); await expect(winnerParagraph).toContainText("X"); }); जैसा कि आप देख सकते हैं, हमारी स्थिरता बनाने के लिए, आपको नाटककार द्वारा प्रदर्शित परीक्षण वस्तु का विस्तार करना होगा। इस फ़ंक्शन के अंदर, आप एक ऑब्जेक्ट बना सकते हैं जो आपके जुड़नार का प्रतिनिधित्व करता है। इस मामले में, मैंने प्लेयर एक्स जीत को पुन: उत्पन्न करने के लिए चरणों को साझा करने के लिए संपत्ति को जोड़ा। इसके अलावा, सिर्फ इसलिए कि मुझे टाइपस्क्रिप्ट के साथ काम करना अच्छा लगता है, मैंने अपने फिक्स्चर का वर्णन करने के लिए प्रकार जोड़ा। यह ध्यान रखना आवश्यक है कि स्थिरता के अंदर, आपको अपने जुड़नार के लिए मूल्य निर्धारित करने के लिए विधि का उपयोग करना चाहिए। playerXWinMoves TestFixtures use ठीक है, जारी रखें, और चलिए अब परीक्षण पर नजर डालते हैं। आप देख सकते हैं कि आप अपने परीक्षण में पास की गई वस्तु से सीधे स्थिरता प्राप्त कर सकते हैं। और अब, यदि आप पिछले वेरिएबल को हटाते हैं और पैराम्स से नए का उपयोग करते हैं, तो आप फ़िक्चर का उपयोग करके Playwright के साथ अपना पहला परीक्षण बनाएंगे। playerXWinMoves बहुत बढ़िया, मुझे आशा है कि आप इस सुविधा की अविश्वसनीय शक्ति को समझ सकते हैं और कैसे यह आपके परीक्षण को अधिक पठनीय बनाने या कई परीक्षणों में उपयोगी कुछ डेटा को एक साथ लाने में आपकी मदद कर सकता है। लेकिन बंद करने से पहले, मैं आपको थोड़ा और छोड़ दूं। जुड़नार के साथ, आप नाटककार द्वारा सीधे उजागर की गई वस्तु को भी ओवरराइड कर सकते हैं। उदाहरण के लिए, आप पेज ऑब्जेक्ट को ओवरराइड कर सकते हैं, और होम पेज पर नेविगेट करने के लिए प्रत्येक हुक बनाने के बजाय, आप पेज को ओवरराइड कर सकते हैं और इस चरण को एक स्थिरता में जोड़ सकते हैं, इसलिए प्रत्येक परीक्षण, इसके निष्पादन से पहले, नेविगेट करने के लिए चरण चलाता है होम पेज पर। beforeEach और हम ऐसा कैसे कर सकते हैं? बस इस तरह। const test = base.extend<TestFixtures>({ page: async ({ baseURL, page }, use) => { baseURL && (await page.goto(baseURL)); await use(page); }, }); ऐसा करने से, अब प्रत्येक परीक्षण, जब यह अपना निष्पादन शुरू करता है, बेसयूआरएल में जाता है और फिर सभी कोड चलाता है। अविश्वसनीय नहीं? अब, आप परीक्षण फ़ाइल में हुक को हटा सकते हैं और परिणाम की जांच करने के लिए अपने परीक्षणों को फिर से चला सकते हैं। beforeEach ठीक है, वह सब लोक है! आज आपने सीखा कि नाटककार जुड़नार कैसे काम करते हैं और कैसे बनाते हैं। मुझे आशा है कि आपको यह पोस्ट अच्छी लगी होगी, और यदि आपको कोई संदेह है, तो मुझसे संपर्क करने में संकोच न करें; मुझे आपकी मदद करने में खुशी होगी। जल्द ही फिर मिलेंगे बाय बाय 👋 ps आप इस आलेख का कोड यहां देख सकते हैं