paint-brush
Nola egokitu probak ReactJS kode-oinarri batean probarik gabearabera@matheusmarabesi
Historia berria

Nola egokitu probak ReactJS kode-oinarri batean probarik gabe

arabera Matheus Marabesi7m2025/02/13
Read on Terminal Reader

Luzeegia; Irakurri

ReactJs ereduak akatsen iturri izan daitezke osagaien hierarkia baten egiturari dagokionez. Osagai horiek deskonposatzea erronka bat da, hala ere, kontuan hartu behar da kodearen oinarria hobeto mantentzeko. Garapen profesionalerako, egoera globala oinarrizko baldintza da, reactjs aplikazioetarako ez da desberdina.
featured image - Nola egokitu probak ReactJS kode-oinarri batean probarik gabe
Matheus Marabesi HackerNoon profile picture

Softwarea probatzea eta hori egitea erraztea nire interesa izan da orain urte batzuk. Interes hori lehen zeuden frontend aplikazioetan zentratuago dago orain. Zehazkiago, reactjs aplikazioetarako. Hilabete batzuk dira bost eta hamar urteko erreakzio-kode batean murgiltzen ari naizela, ikuspegiak eta erronkak eskaintzen dizkidana.


Pertsonalki orain urte batzuk daramatzat reactjs kodea garatzen; Partekatu dudan kode irekiko lehen proiektuetako bat testable deitzen da. 2020an edo kaleratu zen, eta harrezkero, nire ikaskuntza bidearen zati bat reactjs-i eskaini diot.


Berriki, json-tool eta text-tool bezalako gauzen probagarritasunaren zatian zentratzen diren kode irekiko beste proiektu batzuetan lanean aritu naiz; bi aplikazioak kode irekikoak dira eta Snapcraft-en zabaltzen dira. Horiez gain, maiz egiten ditut esperimentuak reactjs-playground izeneko biltegi batean. Reactjs-en funtzioekin esperimentatzen dudan lekua da eta hari ikasteko orduak dedikatzen ditudan. Urte horietan kode hurbileko proiektuetan eta kode irekiko proiektuetan lortu dudan esperientziak oinarri bat eman zidan, komun eta abantaila batzuk identifikatzea ahalbidetzen didana.

Zorrotzak

Reactjs ereduarekin eta tresnarekin bat egiten duten garatzaileak konturatzen dira liburutegiak eskaintzen dituen eraikuntza-blokeak erraz ulertzen eta konposatzen direla. Osagai baten kontzeptu abstraktuena erabiltzaile-interfazeak azkar osatzeko erabil daiteke. Hala ere, akatsen iturri ere izan daiteke osagai baten hierarkiaren egiturari dagokionez. Sistemen deskonposizioa urte luzez aztertutako gaia da .

Osagai handiak

Softwarean abstrakzioaren batasunaren tamaina eztabaidagai ere izan da; metodoek eta klaseek lerro kopuru txiki bat izan behar dutela diote batzuek, eta beste batzuek, aldiz, pieza handiago eta ongi egituratua izatea nahiago dute. Tamaina edozein dela ere software-proiektu guztietan bezala, kodea irakurtzerakoan testuinguru gehiago ematen duen eta karga kognitiboan marruskadura gutxiago sortzen duen tamaina nahiago dut.


Kasualitatea edo ez, nire esperientziaren arabera, hau posible iruditzen zait negozio-testuinguruarekin batera lantzen ari naizen kode-zatiari mugak ondo ezarrita ditudanean. Oraindik ez dut horretarako zenbaki magikoa aurkitu, baina nire neurketa fitxategien artean egin behar dudan jauzi kopurua bihurtu da zer egin behar dudan ulertzeko.


Egin behar ditudan adina jauzi, orduan eta gehiago eduki behar dut buruan testuinguruari eta informazioari; hau gogorra bihurtzen da kodearen oinarria mantenduz. Osagai horiek deskonposatzea erronka bat da, hala ere, kontuan hartu behar da kodearen oinarria hobeto mantentzeko.

Estatu globala

Garapen profesionalerako, estatu globala oinarrizko baldintza da; reactjs aplikazioetarako, ez da desberdina. Egoera globala erraz ikusten dute aplikazioaren erabiltzaileek. Zerbait erosten ari bazara eta produktua zure saskira gehitzen baduzu, gehitu dituzun elementu kopurua ikus dezakezu; hau da estatu globala.


reactjs aplikazioetan, garai batean oso erabilia den redux egoera kudeatzeko pakete globalak orain erabilera murriztu du aplikazioko mugen inguruko testuinguru txikiagoen alde. Hala ere, komunitateak iritzi desberdinak partekatu ditu estatu globalaren kudeaketarako redux erabili beharrari buruz; honek gaiari buruzko blog batzuk sortu zituen:



Komunitateak atzera bota arren, react-redux, hau da, reactjs osagaiekin lotzeko erabiltzen den liburutegia, bere adopzioa hazi egin da azken bost urteetan npm joeren arabera . 2025eko otsailaren 01ean, redux-erako npm-n erakusten diren deskargak 6.752.764 dira.


Horren alternatiba zein den galdetzen baduzu, erantzuna reactjs testuingurua eta kontsultekin amuak dira.


Redux paketearen menpe dauden aplikazioetarako, erronka bat da berez ihes egitea. Egoera globala aplikazioaren probagarritasuna murrizten duen menpekotasunetako bat da. Nire esperientziaren arabera, beharrezkoa den testuinguru globala askotan domeinuaren ezagutzaren konplexutasun handiagoarekin dator. Osagai jakin bat edo zure aplikazioaren zati bat probatu nahi baduzu ere, ezin izango duzu zati honek behar dituen mendekotasun globalak partekatu gabe.

Abantailak

Enpresetako aplikazioetarako reactj-ak hartzea, pieza hau idazteko momentuan, mantengarritasunerako erabaki zuzena izan da (Facebookek liburutegien lizentzia eredua aldatu zuenean izan zuen une larria izan arren). ReactJs-ek atzerako bateragarritasuna eskaintzen du jada erabiltzen ez diren APIentzat, eta horrek epe luzerako adopzioa egiten du abantail nagusietako bat.

Testuinguruak

Osagaiak ibiltzeko kontzeptu abstraktu gisa nahikoak ez balira bezala, testuinguruak ere reactjs-ek probetan ematen duen abantailetako bat dira. Gai honi buruz gehiago lantzen dut reactjs testuinguruaren probari eskainitako blog-argitalpen batean. reactjs testuinguruak eskaintzen duen kapsulatze-maila probak berritzeko eta reactjs kode-oinarrietan birfactorizazioa ahalbidetzeko onura nagusietako bat da.


Osagaien deskonposizioa eta negozio-logika erronka bat direnez, testuinguruak kodearen berregituraketa hobea ahalbidetzen duten tresnak dira. Testagarritasunaren zatian, hau ere abantaila bat da, erabilitako proba-bikoitzaren kopuru murriztua ahalbidetzen duen mekanismoa baita, beraz, kode probagarriagoa izateko.

Berritze-probak

Orain arte, zerrenda hori ikusita, probaren zatia argi geratu da iturburu-kodea nola egituratzen den eta aplikazioaren mugak nola antolatu diren. Hala ere, proba-kodea ekoizpen-kodearen araberakoa den heinean, proba-bikoitzak erabil daitezke esparrua mugatzen laguntzeko. Probak berritzeko pentsamendu-prozesua urrats sinple batzuekin osatzen dute.


  1. Idatzi proba-kasu sinple bat nahi den funtzionalitaterako.
  2. Exekutatu proba kasua eta ikusi huts egiten duela.

2.1. Proba gainditu al da?

 2.1.1 - Yes → Check if the feedback is correct 2.1.2 - No → Provide the dependency without questioning
  1. Itzuli 1era.


Kontuan izan hau: Hemen deskribatzen den ikuspegia Michael Feathersek deskribatutako Karakterizazio proba gisa deskribatzen denaren antzekoa da.

Legacy Code liburuarekin eraginkortasunez lan egitea.


LLM-en etorrerak ere ikuspegiak eman ditzake lehen probak idazten eta kode-oinarriak inongo probarik gabe moldatzen diren bitartean. Estrategia honetako urrats bakoitza errepikakorra izan nahi da; posible da TDD estilo desberdinak konbinatzea ere. Proposatutako planteamendua ez da dena egiteari uztea eta kode-oinarriak dituen proba-kasu posible guztiak eta arazo posible guztiak berritzea, puzzle-jokoa da. Probatutako funtzionalitate bakoitza puzzlean sartzen den pieza bat da.


Ikuspegi bera proposatzen da birfaktorizaziorako. Garatzaileek kode zati bat etengabe birfaktorizatu ahal izan behar dute. Ez da bestelako proiektu bat, eta ez dago soilik hari dedikatzera zuzenduta. Bere helburu nagusia kodearen oinarria zena baino hobea egitea da. Iteratiboki. Badira zenbait alderdi ez duten kode-oinarrietan probak aldatzeko erabil daitezkeenak:


  • Akats bat konpontzea - Kodea ezagutzeko eta nola jokatzen duen ulertzeko aukera da. Akatsa konpontzea arazoaren parte da, hala ere, eskuartean dugun aplikazioa ezaugarritzeko aukera ere bada.
  • Funtzionalitate berri bat ezartzea - Hau akats bat konpontzearen berdina da, hala ere, hartutako ikuspegia pixka bat aldatzen da. Kent Beckek iradokitako ikuspegi bera da: "Egin aldaketa erraza, gero aldaketa erraza". Funtzio berri bat funtzio berria sartu aurretik aldaketa bat egiteko kode-oinarria erakusten duen tokia da.


Planteamendu honen oinarrian ikasketa prozesua dago; kodearen oinarria ikasteko urrats guztiak hartzen dira kontuan.

LLMak

Copilot aurreko atalean azaldutako lehen esplorazio proba automatizatzeko erabil daiteke; hiru arau jarraituz, mendekotasunak identifikatzen eta oinarri gisa erabiltzeko proba integralen multzoa idazten has daiteke.


Har dezagun Testable adibide gisa; reactjs-en duela bost urte baino gehiago idatzitako aplikazioa da eta probak egiteko entzima erabiltzen du. Gaur egungo estandarrentzat, hartu zuen liburutegia proba-liburutegiarekin batera vitest edo broma da. Proba kasuak probatzeko eta LLMak aprobetxatzeko, copilotoa erabil dezakegu astunak egiten laguntzeko.


Testable esperientzia gamifikatu batez osatuta dago, erronka ezberdinetan egoera, maila eta erabiltzaileen progresioa dituena. Hurrengo irudian deskribatzen den osagaia elkarrizketa-koadroak erakusteko eta esperientziaren historian aurrera egiteko erabiltzen den osagaia da. Copilot vscode-rako erabilita, interesatzen zaigun ekoizpen-kodearekin proba bat idazteko eskatu nion:


Kopilotari proba kasu bat idazteko eskatzea

Galdera kargatu eta kodea aztertu ondoren, erantzuna ematen du.

Kopilotearen erantzuna proba-kasuan

Erantzunarekin batera, Copilot ohartu da oraindik ez dudala proba-liburutegirik erabiltzen eta hori egitea iradokitzen du, eta horren ostean, sortutako proba kasua erakusten da. Proba-kasua erakusten den moduan exekutatzen baduzu, proba ez da gainditzen eta gorri gisa markatzen du.


Sortze kodearen proba huts egin du

Puntu hau garrantzitsua da, konfigurazio osagarriak kontuan hartu behar direla erakusten duelako eta Copilotek ezin izan duela asmatu. Honako hauek dira:

  • Inportazioa ez da zuzena; konpondu behar da fitxategi zuzena seinalatzeko.
  • Edukiaren konfigurazioa ez da zuzena; fitxategiak ezin izan zuen edukia probarako kasurako baliozko bihurtu.


Atal honetan lehenago deskribatutako fluxua hemen ere aplikatzen da. Iritzi-begizta orain arazo horiek konpontzen hastea eta probak egitea da TDD zikloa amaitu arte.


Baliabideak