paint-brush
नाटककार में फिक्स्चर के लिए एक आवश्यक गाइडद्वारा@puppo
1,541 रीडिंग
1,541 रीडिंग

नाटककार में फिक्स्चर के लिए एक आवश्यक गाइड

द्वारा Luca Del Puppo4m2023/02/09
Read on Terminal Reader

बहुत लंबा; पढ़ने के लिए

यदि आप नाटककार के साथ काम करने जा रहे हैं और आप अपने परीक्षणों के बीच डेटा साझा करना चाहते हैं या कस्टम निष्पादन बनाना चाहते हैं तो फिक्स्चर एक महत्वपूर्ण मित्र हैं। जुड़नार का उपयोग प्रत्येक परीक्षण के लिए एक वातावरण स्थापित करने के लिए किया जाता है, परीक्षण को वह सब कुछ देता है जिसकी उसे आवश्यकता होती है और कुछ नहीं। जुड़नार के साथ, आप उनके मानक सेटअप के बजाय उनके अर्थ के आधार पर परीक्षणों को समूहित कर सकते हैं।
featured image - नाटककार में फिक्स्चर के लिए एक आवश्यक गाइड
Luca Del Puppo HackerNoon profile picture


सुनो,


आज मैं फिक्स्चर के बारे में बात करना चाहता हूं, यदि आप नाटककार के साथ काम करने जा रहे हैं और आप अपने परीक्षणों के बीच डेटा साझा करना चाहते हैं या कस्टम निष्पादन बनाना चाहते हैं तो यह एक महत्वपूर्ण मित्र है।


आइए एक साधारण उदाहरण से शुरू करें।


 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 विधि का उपयोग करना चाहिए।


ठीक है, जारी रखें, और चलिए अब परीक्षण पर नजर डालते हैं। आप देख सकते हैं कि आप अपने परीक्षण में पास की गई वस्तु से सीधे playerXWinMoves स्थिरता प्राप्त कर सकते हैं। और अब, यदि आप पिछले वेरिएबल को हटाते हैं और पैराम्स से नए का उपयोग करते हैं, तो आप फ़िक्चर का उपयोग करके Playwright के साथ अपना पहला परीक्षण बनाएंगे।


बहुत बढ़िया, मुझे आशा है कि आप इस सुविधा की अविश्वसनीय शक्ति को समझ सकते हैं और कैसे यह आपके परीक्षण को अधिक पठनीय बनाने या कई परीक्षणों में उपयोगी कुछ डेटा को एक साथ लाने में आपकी मदद कर सकता है।


लेकिन बंद करने से पहले, मैं आपको थोड़ा और छोड़ दूं। जुड़नार के साथ, आप नाटककार द्वारा सीधे उजागर की गई वस्तु को भी ओवरराइड कर सकते हैं। उदाहरण के लिए, आप पेज ऑब्जेक्ट को ओवरराइड कर सकते हैं, और होम पेज पर नेविगेट करने के लिए प्रत्येक हुक beforeEach बनाने के बजाय, आप पेज को ओवरराइड कर सकते हैं और इस चरण को एक स्थिरता में जोड़ सकते हैं, इसलिए प्रत्येक परीक्षण, इसके निष्पादन से पहले, नेविगेट करने के लिए चरण चलाता है होम पेज पर।


और हम ऐसा कैसे कर सकते हैं? बस इस तरह।


 const test = base.extend<TestFixtures>({ page: async ({ baseURL, page }, use) => { baseURL && (await page.goto(baseURL)); await use(page); }, });


ऐसा करने से, अब प्रत्येक परीक्षण, जब यह अपना निष्पादन शुरू करता है, बेसयूआरएल में जाता है और फिर सभी कोड चलाता है। अविश्वसनीय नहीं? अब, आप परीक्षण फ़ाइल में beforeEach हुक को हटा सकते हैं और परिणाम की जांच करने के लिए अपने परीक्षणों को फिर से चला सकते हैं।


ठीक है, वह सब लोक है!


आज आपने सीखा कि नाटककार जुड़नार कैसे काम करते हैं और कैसे बनाते हैं।


मुझे आशा है कि आपको यह पोस्ट अच्छी लगी होगी, और यदि आपको कोई संदेह है, तो मुझसे संपर्क करने में संकोच न करें; मुझे आपकी मदद करने में खुशी होगी।


जल्द ही फिर मिलेंगे

बाय बाय 👋


ps आप इस आलेख का कोड यहां देख सकते हैं