Fanya Semi za Kawaida ziweze Kujaribiwa na Kueleweka
TL;DR: Unaweza kugawanya regex changamano ya uthibitishaji katika sehemu ndogo ili kujaribu kila sehemu kibinafsi na kuripoti makosa sahihi.
Matatizo Yameshughulikiwa 😔
- Semi za kawaida ambazo hazijajaribu
- Kuripoti kosa lisilo wazi
- Kutatua ndoto mbaya
- Changamoto za utunzaji
- Mistari na mbinu ndefu sana
- Misemo isiyoweza kudumishwa
- Obsession ya Awali
- Hitilafu ya kutengwa
- Silo za maarifa
- Maoni ya kizamani
- Makosa bila huruma kwa watumiaji wa mwisho
Misimbo Husika Harufu 💨
https://hackernoon.com/how-to-find-the-stinky-parts-of-your-code-part-xxv
https://hackernoon.com/how-to-find-the-stinky-parts-of-your-code-part-i-xqz3evd
https://hackernoon.com/how-to-find-the-stinky-parts-of-your-code-part-i-xqz3evd
https://hackernoon.com/how-to-find-the-stinky-parts-of-your-code-part-xxxvii
https://hackernoon.com/how-to-find-the-stinky-parts-of-your-code-part-xx-we-have-reached-100
https://hackernoon.com/how-to-find-the-stinky-parts-of-your-code-part-ix-7rr33ol
Hatua 👣
- Chambua regex ili kutambua vipengele vyake vya kimantiki.
- Vunja regex kuwa vidogo vidogo, vilivyopewa vielelezo vidogo kwa kila sehemu.
- Andika majaribio ya kitengo kwa kila muundo mdogo ili kuhakikisha kuwa inafanya kazi kwa usahihi.
- Changanya miundo midogo iliyojaribiwa kwenye mantiki kamili ya uthibitishaji.
- Rekebisha msimbo ili kutoa ujumbe wazi wa makosa kwa kila sehemu inayoshindwa.
Sampuli ya Msimbo 💻
Kabla 🚨
function validateURL(url) { const urlRegex = /^(https?:\/\/)([a-zA-Z0-9.-]+\.[a-zA-Z]{2,})(\/.*)?$/; // Criptic and untesteable return urlRegex.test(url); }
Baada ya 👉
// Step 1: Define individual regex components const protocolPattern = /^(https?:\/\/)/; const domainPattern = /^[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/; const pathPattern = /^\/.*$/; // Step 2: Write unit tests for each component describe("Protocol Validation", () => { test("should pass for http://", () => { expect(protocolPattern.test("http://")).toBe(true); }); test("should pass for https://", () => { expect(protocolPattern.test("https://")).toBe(true); }); test("should fail for invalid protocols", () => { expect(protocolPattern.test("ftp://")).toBe(false); }); }); describe("Domain Validation", () => { test("should pass for valid domains", () => { expect(domainPattern.test("example.com")).toBe(true); expect(domainPattern.test("sub.domain.org")).toBe(true); }); test("should fail for invalid domains", () => { expect(domainPattern.test("example")).toBe(false); expect(domainPattern.test("domain..com")).toBe(false); }); }); describe("Path Validation", () => { test("should pass for valid paths", () => { expect(pathPattern.test("/path/to/resource")).toBe(true); expect(pathPattern.test("/")).toBe(true); }); test("should fail for invalid paths", () => { expect(pathPattern.test("path/to/resource")).toBe(false); expect(pathPattern.test("")).toBe(false); }); }); // Step 3: Validate each part and report errors function validateURL(url) { if (!protocolPattern.test(url)) { throw new Error("Invalid protocol. Use http:// or https://."); } const domainStartIndex = url.indexOf("://") + 3; const domainEndIndex = url.indexOf("/", domainStartIndex); const domain = domainEndIndex === -1 ? url.slice(domainStartIndex) : url.slice(domainStartIndex, domainEndIndex); if (!domainPattern.test(domain)) { throw new Error("Invalid domain name."); } const path = url.slice(domainEndIndex); if (path && !pathPattern.test(path)) { throw new Error("Invalid path."); } return true; } // Step 4: Add integration tests for the full URL validation describe("Full URL Validation", () => { test("should pass for valid URLs", () => { expect(validateURL("https://lesluthiers.com/tour/")).toBe(true); expect(validateURL("https://bio.lesluthiers.org/")).toBe(true); }); test("should fail for invalid URLs", () => { expect(() => validateURL("ftp://mastropiero.com")). toThrow("Invalid protocol"); expect(() => validateURL("http://estherpsicore..com")). toThrow("Invalid domain name"); expect(() => validateURL("http://book.warren-sanchez")). toThrow("Invalid path"); }); });
Andika 📝
- [x] Semi-Otomatiki
Usalama 🛡️
Urekebishaji huu ni salama ikiwa utafuata hatua kwa uangalifu.
Kujaribu kila sehemu huhakikisha kwamba unapata makosa mapema.
Kwa nini Kanuni ni Bora? ✨
Nambari iliyorekebishwa ni bora zaidi kwa sababu inaboresha usomaji, udumishaji na uwezo wa majaribio.
Kuvunja regex katika sehemu ndogo hufanya kuelewa ni nini kila sehemu hufanya rahisi.
Unaweza pia kuripoti hitilafu mahususi uthibitishaji unaposhindwa, ambayo huwasaidia watumiaji kurekebisha maingizo yao.
Hii pia ni fursa nzuri ya kutumia mbinu ya Ukuzaji Inayoendeshwa na Mtihani , na kuongeza hatua kwa hatua utata kwa kuanzisha sehemu ndogo mpya.
Je, Inaboreshaje Mabishano? 🗺️
Kwa kugawanya regex katika vipengele vidogo, vya maana, unaunda ramani ya karibu kati ya mahitaji ya Ulimwengu Halisi (km, "URL lazima iwe na itifaki halali") na msimbo.
Hii inapunguza utata na kuhakikisha kwamba msimbo unaonyesha kikoa cha tatizo kwa usahihi.
Mapungufu ⚠️
Njia hii inaweza kuongeza sehemu za juu kwa mifumo rahisi sana ya regex ambapo kuivunja itakuwa sio lazima.
Refactor na AI 🤖
Unaweza kutumia zana za AI kusaidia kutambua vifaa vya regex.
Uliza AI ieleze ni nini kila sehemu ya regex hufanya, kisha ikuongoze katika kuivunja katika vipande vidogo, vinavyoweza kujaribiwa. Kwa mfano, unaweza kuuliza, "Regex hii inafanya nini?" na kufuata, "Ninawezaje kuigawanya katika sehemu ndogo?".
Ni 2025, Hakuna mtayarishaji programu anayepaswa kuandika Maneno mapya ya Kawaida tena.
Unapaswa kuacha kazi hii ya mitambo kwa AI.
Ushauri Unaopendekezwa: 1. Changanua regex ili kutambua vipengele vyake vya kimantiki.2. Vunja regex kuwa ndogo, iliyopewa vielelezo vidogo kwa kila sehemu.3. Andika vipimo vya kitengo kwa kila muundo mdogo ili kuhakikisha kuwa unafanya kazi ipasavyo.4. Changanya miundo midogo iliyojaribiwa katika mantiki kamili ya uthibitishaji.5. Rekebisha msimbo ili kutoa ujumbe wazi wa makosa kwa kila sehemu inayoshindwa.
Bila Maelekezo Sahihi | Pamoja na Maagizo Maalum |
---|---|
Lebo 🏷️
- Uthibitisho
Kiwango 🔋
- [x] Kati
Refactorings Husika 🔄
Tazama pia 📚
Mikopo 🙏
Picha na Gerd Altmann kwenye Pixabay
Nakala hii ni sehemu ya Msururu wa Kurekebisha.