paint-brush
जैस्मीन: शुद्ध कार्यों और बुनियादी परीक्षणों पर एक शुरुआती-अनुकूल मार्गदर्शिकाद्वारा@marcinwosinek
200 रीडिंग

जैस्मीन: शुद्ध कार्यों और बुनियादी परीक्षणों पर एक शुरुआती-अनुकूल मार्गदर्शिका

द्वारा Marcin Wosinek6m2024/02/11
Read on Terminal Reader

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

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

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

चमेली

जैस्मिन जावास्क्रिप्ट के लिए एक यूनिट टेस्ट फ्रेमवर्क है। यह Node.js या ब्राउज़र दोनों में परीक्षण चला सकता है। इसका उपयोग एंगुलर फ्रेमवर्क में किया जाता है, और यह एंगुलर पर आधारित परियोजनाओं में विशेष रूप से लोकप्रिय है। यह वेनिला जेएस परियोजनाओं या अन्य रूपरेखाओं पर आधारित परियोजनाओं के लिए भी एक ठोस विकल्प है।

शुभ पथ परीक्षण

हैप्पी पाथ टेस्टिंग तब होती है जब हम इनपुट के साथ एक विधि का परीक्षण करते हैं जिसके सामान्य रूप से काम करने की उम्मीद होती है। तर्क मान्य हैं और उचित दायरे में हैं। वे परीक्षण यह जांचते हैं कि क्या विधि अपना काम सही ढंग से करती है - परीक्षण मामलों को इस बात का सीधा उदाहरण होना चाहिए कि विधि को उसके दस्तावेज़ में कैसे समझाया गया है।


स्यूडोकोड उदाहरण:

  • expect(add(2, 2)).toBe(4) ,


  • expect(concatenate(“Lorem”, “Ipsum”)).toBe(“LoremIpsum”)


उन परीक्षणों का उद्देश्य किसी भी समय विधि कुंजी व्यवहार के टूटने पर इसे स्वचालित रूप से पकड़ना है।

तरीकों

आइए कुछ सरल तरीकों को देखें: सरल संचालन जिनकी हमें कुछ वास्तविक दुनिया के अनुप्रयोगों में आवश्यकता हो सकती है।


सभी कार्यान्वयन बहुत सरल हैं - सभी विधियां बदसूरत तरीके से टूट जाएंगी यदि हम केवल उन्हें ऐसे पैरामीटर प्रदान करते हैं जो अपेक्षित से थोड़ा भिन्न होते हैं। कोड मजबूत होने से कोसों दूर है।

अभिवादन करना

वह विधि जो उपयोगकर्ता को उनके नाम और उपनाम के साथ स्वागत करती है:

 export function greet(name, surname) { return `Hello ${name} ${surname}!`; }

कम समय

shortDate एक फ़ॉर्मेटिंग विधि है जो एक दिनांक ऑब्जेक्ट लेती है और इसे एक छोटी स्ट्रिंग के रूप में स्वरूपित करके लौटाती है। कोड:

 export function shortDate(date) { return date.toISOString().substring(0, 10); }

अंडाकार

ellipsis एक लंबी टेक्स्ट स्ट्रिंग और एक वैकल्पिक लंबाई पैरामीटर लेता है, और फिर स्ट्रिंग को सीमा के भीतर फिट करने के लिए ट्रिम करता है:

 export function ellipsis(text, length = 50) { if (text.length > length) { return text.substring(0, length) + "…"; } return text; }

अनुवाद

एक विधि जो key और lang जोड़ी के लिए अनुवादित स्ट्रिंग मान प्रदान करती है। यह एक सरलीकृत कार्यान्वयन है जिसे अधिक उन्नत अनुवाद पुस्तकालयों से बदला जा सकता है।

 export function translate(key, lang = "en") { switch (lang) { case "en": switch (key) { case "hello": return "Hello!"; } case "pl": switch (key) { case "hello": return "Cześć!"; } } }

छूट लागू करें

किसी कीमत पर प्रतिशत छूट लागू करने की विधि. इस अनुभवहीन कार्यान्वयन के साथ यह अतिश्योक्ति जैसा लग सकता है, लेकिन बाद में, जब हम किनारे के मामलों की जांच शुरू करेंगे, तो यह और अधिक दिलचस्प हो जाएगा।

 export function applyDiscount(price, discountPercentage) { return price - (price * discountPercentage) / 100; }

मूल्य की गणना करें

यह किसी दिए गए मूल्य पर एकाधिक इकाइयाँ खरीदते समय कुल मूल्य की गणना करता है। दिलचस्प किनारे वाले मामले जोड़ने के बाद यह और भी जटिल हो जाएगा।

 export function calculatePrice(unitPrice, quantity) { return unitPrice * quantity; }

पूरा जेएस कोड

संपूर्ण JS कोड, src/main.js :

 export function greet(name, surname) { return `Hello ${name} ${surname}!`; } export function shortDate(date) { return date.toISOString().substring(0, 10); } export function ellipsis(text, length = 50) { if (text.length > length) { return text.substring(0, length) + "…"; } return text; } export function translate(key, lang = "en") { switch (lang) { case "en": switch (key) { case "hello": return "Hello!"; } case "pl": switch (key) { case "hello": return "Cześć!"; } } } export function applyDiscount(price, discountPercentage) { return price - (price * discountPercentage) / 100; } export function calculatePrice(unitPrice, quantity) { return unitPrice * quantity; }

जैस्मीन टेस्ट जोड़ना

जैस्मीन को जोड़ने के लिए, आइए फ़ोल्डर को एनपीएम पैकेज में परिवर्तित करके शुरू करें:

 $ npm init -y Wrote to …/package.json: …


फिर हम जैस्मीन पैकेज स्थापित कर सकते हैं:

 $ npm install --save-dev jasmine added 42 packages, and audited 43 packages in 2s 13 packages are looking for funding run `npm fund` for details found 0 vulnerabilities


फिर हम जैस्मीन द्वारा उपयोग किए गए फ़ोल्डर और फ़ाइलें उत्पन्न कर सकते हैं:

 $ npx jasmine init (no output)


यह आदेश निम्नलिखित उत्पन्न करता है:

  • spec/ -एक फ़ोल्डर जहां हम परीक्षण के साथ *.spec.js फ़ाइलें डाल सकते हैं, और


  • spec/support/jasmine.json - जैस्मीन कॉन्फ़िगरेशन वाली एक फ़ाइल।

यूनिट परीक्षण

निम्नलिखित इकाई परीक्षणों के लिए, मैं केवल खुशहाल पथ पर ध्यान केंद्रित कर रहा हूं - मैं जांचता हूं कि क्या परिणाम उचित इनपुट के लिए अपेक्षित है। परीक्षण स्व-व्याख्यात्मक होना चाहिए, तो आइए उन पर एक नज़र डालें:

 import { greet, shortDate, ellipsis, translate, applyDiscount, calculatePrice, } from "../src/main.js"; describe("main", () => { describe("greet", () => { it("should greet by name and surname", () => { expect(greet("Lorem", "Ipsum")).toEqual("Hello Lorem Ipsum!"); }); }); describe("shortDate", () => { it("should format correclty date", () => { const date = new Date("2023-11-02"); expect(shortDate(date)).toEqual("2023-11-02"); }); }); describe("shortDate", () => { it("should shorten long text at 50 chars", () => { expect( ellipsis( "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque a faucibus massa." ) ).toEqual("Lorem ipsum dolor sit amet, consectetur adipiscing…"); }); it("should leave short text unchanged", () => { expect(ellipsis("Lorem ipsum sin dolor")).toEqual( "Lorem ipsum sin dolor" ); }); it("should shorten to custom length", () => { expect(ellipsis("Lorem ipsum sin dolor", 10)).toEqual("Lorem ipsu…"); }); }); describe("translate", () => { it("should translate to supported langauges", () => { expect(translate("hello", "en")).toEqual("Hello!"); expect(translate("hello", "pl")).toEqual("Cześć!"); }); }); describe("applyDiscount", () => { it("should lower the price accordingly", () => { expect(applyDiscount(120, 25)).toEqual(90); expect(applyDiscount(8, 50)).toEqual(4); }); }); describe("calculatePrice", () => { it("should find a price of many products", () => { expect(calculatePrice(4, 3)).toEqual(12); expect(calculatePrice(9, 0.5)).toEqual(4.5); }); }); });

(फ़ाइल spec/main.spec.js )

चल रहे परीक्षण

परीक्षण चलाने के लिए, हम निम्नलिखित स्क्रिप्ट को package.json में जोड़ सकते हैं:

 .. "scripts": { "test": "jasmine" }, …


इसके साथ, npm run test हमारे परीक्षण चलाता है:

 $ npm run test > [email protected] test > jasmine Randomized with seed 76873 Started ........ 8 specs, 0 failures Finished in 0.004 seconds Randomized with seed 76873 (jasmine --random=true --seed=76873)

सारांश

इस पोस्ट में, हमने जेएस कोड का एक सरल उदाहरण देखा और इसे यूनिट परीक्षणों द्वारा कैसे कवर किया जा सकता है। आप GitHub पर संपूर्ण कोड उदाहरण पा सकते हैं।


यहाँ भी प्रकाशित किया गया