सुनो,
आज मैं फिक्स्चर के बारे में बात करना चाहता हूं, यदि आप नाटककार के साथ काम करने जा रहे हैं और आप अपने परीक्षणों के बीच डेटा साझा करना चाहते हैं या कस्टम निष्पादन बनाना चाहते हैं तो यह एक महत्वपूर्ण मित्र है।
आइए एक साधारण उदाहरण से शुरू करें।
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 आप इस आलेख का कोड यहां देख सकते हैं