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