Testarea RSPE pentru începători, Partea 3

În acest articol final despre elementele de bază ale RSpec, vom acoperi câteva părți compatibile pe care le puteți evita, cum ar trebui să le compuneți, de ce ar trebui să evitați cât mai mult posibil baza de date și cum să accelerați suita de testare.  

Subiecte

  • Test de viteză
  • Baza de date a bazei de date
  • Preloader de primăvară
  • Iffy RSpec Convenții
  • Oaspeții misteriali
  • Cod inline
  • Metode de extragere

Acum, că aveți elementele de bază sub centură, ar trebui să acordăm timp pentru a discuta câteva aspecte compatibile cu RSpec și TDD - câteva aspecte care pot fi utile cu exces și unele dezavantaje ale utilizării unor părți ale DSPL RSPE nereflectate. Vreau să evit să umplu o mulțime de concepte avansate în creierul tău proaspăt creat, dar simt că trebuie făcute câteva puncte înainte de a merge la primul tău sondaj. De asemenea, crearea unui suită de testare lentă din cauza obiceiurilor proaste care sunt ușor de evitat este ceva ce vă puteți îmbunătăți imediat ca începător.

Sigur, sunt destul de multe lucruri de care aveți nevoie pentru a obține mai multă experiență înainte de a vă simți confortabil și eficient cu testarea, dar pariez că vă veți simți mai bine încă de la început dacă luați unele dintre cele mai bune practici care vă vor îmbunătăți specifică varietatea fără a vă extinde prea mult abilitățile acum. Este, de asemenea, o fereastră mică în concepte mai avansate pe care va trebui să le luați în timp pentru a "stăpâni" testarea. Simt că nu ar trebui să te deranjez prea mult la început cu aceste, pentru că s-ar putea simți doar complicat și confuz înainte de a dezvolta o imagine mai mare care leagă totul împreună.

Test de viteză

Să începem cu viteza. O suită rapidă nu este nimic care se întâmplă din întâmplare; este o chestiune de întreținere "constantă". Ascultarea testelor dvs. foarte frecvent este destul de importantă - cel puțin dacă sunteți la bord cu TDD și ați fost băut Kool-Aid pentru o perioadă de timp - și suite de testare rapide fac mult mai rezonabil să acordați atenție unde sunt testele de ghidare tu.

Viteza de testare este ceva la care ar trebui să aveți grijă. Este esențial să faceți testarea unui obicei obișnuit și să îl păstrați distractiv. Doriți să vă puteți rula rapid testele pentru a obține feedback rapid în timp ce vă dezvoltați. Cu cât este mai mult să exerciți suita de testare, cu atât va fi mai probabil să săriți din ce în ce mai mult testarea până când o veți face doar la sfârșit înainte de a trimite o nouă caracteristică. 

Acest lucru nu s-ar părea așa de rău la început, dar aceasta nu este o problemă trivială. Unul dintre principalele beneficii ale unei suite de testare este că ghidează proiectarea aplicației dvs. - pentru mine aceasta este probabil cea mai mare victorie de la TDD. Progresele mai lungi fac această parte destul de mult imposibilă, deoarece este foarte probabil că nu le veți executa pentru a nu vă rupe fluxul. Testele rapide garantează că nu aveți niciun motiv să nu efectuați testele.

Puteți vedea acest proces ca un dialog între dvs. și suita de testare. Dacă această conversație devine prea lentă, este foarte dureros să continuăm. Când editorul de cod vă oferă posibilitatea de a rula și testele dvs., trebuie să utilizați cu siguranță această caracteristică. Acest lucru va crește dramatic viteza și vă va îmbunătăți fluxul de lucru. Comutarea de fiecare dată între editor și un shell pentru a rula testele devine vechi foarte repede. Dar, din moment ce aceste articole sunt destinate programatorilor newbie, nu mă aștept să vă configurați astfel de instrumente imediat. Există și alte modalități prin care puteți îmbunătăți acest proces, fără a fi nevoie să vă grăbiți imediat cu editorul dvs. Este bine să știți, însă, și vă recomand să faceți ca astfel de instrumente să facă parte din fluxul de lucru.

De asemenea, fiți conștienți de faptul că ați învățat deja cum să vă tăiați testele și că nu este nevoie să rulați complet suita de test tot timpul. Puteți rula cu ușurință fișiere unice sau chiar single aceasta blocuri - toate într-un editor de cod capabil, fără a lăsa vreodată pentru terminal. Puteți focaliza testul asupra liniei testate, de exemplu. Asta e ca magia, să fiu sincer - nu se plictisește niciodată.

Baza de date a bazei de date

Scrierea prea mult în baza de date - adesea foarte inutilă - este o modalitate sigură de a vă încetini rapid suita de testare în mod semnificativ. În multe scenarii de testare, puteți falsifica datele de care aveți nevoie pentru a seta un test și doar să vă concentrați asupra datelor care sunt direct testate. Nu aveți nevoie să atingeți baza de date pentru toate cele mai multe ori - în special nu pentru piese care nu sunt testate direct și doar suportă testul într-un fel: un utilizator logat în timp ce testați suma care trebuie plătită la un checkout, de exemplu. Utilizatorul este ca un extra care poate fi falsificat. 

Ar trebui să încercați să scăpați fără să atingeți baza de date cât mai mult posibil, deoarece acest lucru mușcă o bucată mare dintr-o suită de testare lentă. De asemenea, încercați să nu configurați prea multe date dacă nu aveți nevoie de ele deloc. Asta poate fi foarte ușor să uiți cu testele de integrare mai ales. Testele de testare sunt adesea mult mai concentrate prin definiție. Această strategie se va dovedi foarte eficientă în evitarea încetinirii suitelor de testare de-a lungul timpului. Alegeți dependențele cu mare grijă și vedeți care este cea mai mică cantitate de date pe care încercările dumneavoastră o parcurg.

Nu mai vreau să intru în alte detalii - este probabil puțin prea devreme în traiectoria dvs. pentru a vorbi despre stuburi, spioni, falsuri și alte lucruri. Te confundă aici cu astfel de concepte avansate pare contraproductivă și vei ajunge destul de curând în ele. Există multe strategii pentru teste rapide care implică și alte instrumente decât RSpec. Pentru moment, încercați să vă împachetați capul în jurul imaginii mai mari cu RSpec și testarea în general.

De asemenea, doriți să încercați să încercați totul o singură dată - dacă este posibil. Nu re-testați același lucru de peste și peste din nou - că este doar risipă. Acest lucru se întâmplă mai ales prin decizii accidentale și / sau rău de proiectare. Dacă ați început să aveți teste care sunt lente, acesta este un loc ușor de refactor pentru a obține un impuls de viteză.

Majoritatea testelor dvs. ar trebui să fie și la nivel de unitate, testarea modelelor dvs. Acest lucru nu numai că va menține lucrurile rapid, dar vă va oferi și cel mai mare bang pentru dolar. Testele de integrare care testează întregul flux de lucru - imită comportamentul utilizatorului într-o anumită măsură, reunind o grămadă de componente și testarea acestora în mod sincron - ar trebui să fie cea mai mică parte a piramidei dvs. de testare. Acestea sunt destul de lente și "scumpe". Poate că 10% din testele tale generale nu este nerealistă pentru a trage - dar depinde, cred.

Exercitarea bazei de date cât mai puțin posibil poate fi dificilă pentru că trebuie să învățați mai multe instrumente și tehnici pentru a obține acest lucru în mod eficient, dar este esențial să crească suitele de test care sunt suficient de repede pentru a rula într-adevăr testele dvs..

Preloader de primăvară

Serverul de primăvară este o caracteristică a Rails și vă preîncarcă aplicația. Aceasta este o altă strategie simplă pentru a crește viteza de testare în mod semnificativ - chiar din cutie, aș adăuga. Ceea ce face este să păstrați pur și simplu aplicația dvs. care rulează în fundal, fără a fi nevoie să-l încărcați cu fiecare test de testare. Același lucru este valabil și pentru sarcinile de rake și pentru migrații; acestea vor rula și mai repede.

Din moment ce Rails 4.1, Spring a fost inclus în Rails - adăugat automat la Gemfile - și nu trebuie să faceți prea mult pentru a porni sau a opri acest preloader. În trecut, a trebuit să facem propriile noastre instrumente de alegere pentru asta - pe care totuși le puteți face, bineînțeles, dacă aveți alte preferințe. Ceea ce este cu adevărat plăcut și grijuliu este că se va reporni automat dacă schimbați unele pietre, inițializatoare sau fișiere de configurare - o atingere plăcută și utilă, deoarece este ușor să uitați să aveți grijă de ea.

Implicit este configurat să ruleze șine și greblă numai comenzi. Așadar, trebuie să ne pregătim pentru a rula și cu rspec comanda pentru efectuarea testelor noastre. Puteți cere statutul de primăvară așa:

Terminal

starea de primăvară

producție

Nu se execută arcul.

Deoarece ieșirea ne-a spus că primăvara nu se execută, pur și simplu o porniți server de primăvară. Când alergi acum starea de primăvară, ar trebui să vedeți ceva similar cu acesta:

producție

Primăvara rulează: 3738 server de primăvară | rspec-dummy | a început acum 21 de secunde

Acum ar trebui să verificăm ce este pregătit Primăvara pentru a preîncărca.

Terminal

binstub de primăvară - toate

producție

* bin / rake: primăvara deja prezentă * bin / șine: primăvara este deja prezentă

Acest lucru ne spune că primăvara este preloading Rails pentru greblă și șine comenzi și nimic altceva până acum. Trebuie să avem grijă de asta. Trebuie să adăugăm bijuteria primăvară-comenzi-rspec, iar testele noastre sunt gata de preîncărcare.

Gemfile

gem "spring-commands-rspec", grup:: dezvoltare

Terminal

pachet de instalare bundle exec spring binstub rspec

V-am scutit de ieșire instalare pachet; Sunt sigur că ați văzut deja mai mult decât o parte echitabilă din ea. Alergare pachet exec primăvară binstub rspec, pe de altă parte, generează a bin / rspec fișier care în principiu adaugă ca acesta să fie preîncărcat de primăvară. Să vedem dacă funcționează:

Terminal

binstub de primăvară - toate

Acest lucru a creat ceva numit binstub-wrapper pentru executabile, cum ar fi șine, greblă, pachet, rspec și astfel - astfel încât atunci când utilizați rspec comanda va folosi Spring. Ca o parte, astfel de binstubs se asigura ca rulati aceste executabile in mediul potrivit. De asemenea, vă permit să rulați aceste comenzi din fiecare director din aplicația dvs., nu doar din rădăcină. Celălalt avantaj al binstub-urilor este că nu trebuie să prependi pachet exec Cu totul.

producție

* bin / rake: primăvara deja prezentă * bin / rspec: primăvara deja prezentă * bin / șine: primăvara este deja prezentă

Arată A-OK! Să ne oprim și să reporniți serverul de primăvară înainte de a merge mai departe:

Terminal

primăvara de primăvară

Deci, acum rulați serverul de primăvară într-o singură fereastră dedicată terminalului și executați testele cu o sintaxă puțin diferită în altă. Pur și simplu trebuie să prefixăm fiecare test de testare cu primăvară comanda:

Terminal

primăvară rspec spec

Acest lucru rulează toate fișierele de spec. Dar nu este nevoie să vă opriți acolo. Puteți rula, de asemenea, fișiere unice sau teste etichetate prin Spring-no problemă! Și toți vor fi fulgeră acum; pe suite de testare mai mici, ele par chiar aproape instantanee. În plus, puteți utiliza aceeași sintaxă pentru dvs. șine și greblă comenzi. Bine, eh?

Terminal

arc de primăvară șine de arc g model BondGirl nume: șurub de primăvară șir db: migrați ... 

Deci, primim Primăvara din cutie pentru a grăbi lucrurile în Rails, dar nu trebuie să uităm să adăugăm acest mic Gem pentru ca Spring să știe cum să joace mingea cu RSpec.

Iffy RSpec Convenții

Lucrurile menționate în această secțiune sunt, probabil, bune pentru a evita atâta timp cât puteți găsi o altă soluție pentru ei. Folosind câteva dintre facilitățile RSpec poate duce la dezvoltarea unor obiceiuri de testare necorespunzătoare - cel puțin la cele mai proaste. Ceea ce vom discuta aici este convenabil la suprafață, dar s-ar putea să vă mușcăm puțin mai târziu pe drum.

Ele nu ar trebui să fie considerate AntiPatterns - lucruri pe care trebuie să le evitați imediat - ci mai degrabă văzute ca "mirosuri", lucruri pe care ar trebui să fiți atenți și care ar putea să introducă un cost semnificativ pe care de multe ori nu doriți să-l plătiți. Motivul pentru aceasta implică și alte câteva idei și concepte pe care dumneavoastră, ca începător, cel mai probabil nu le cunoașteți încă - și chiar sincer ar putea să vă fie puțin peste cap în acest moment - dar ar trebui cel puțin să vă trimit acasă cu câteva steaguri roșii să se gândească și să se angajeze în memorie pentru moment.

  • lăsa

Aveți multe lăsa referințele pot părea foarte convenabile la început - mai ales pentru că acestea DRY lucrurile destul de un pic. Se pare ca o extragere destul de buna la inceput sa le ai in partea de sus a fisierelor tale, de exemplu. Pe de altă parte, vă pot ajuta cu ușurință să vă înțelegeți propriul cod, dacă vizitați anumite teste specifice mai târziu. Nu aveți setările de date în cadrul dvs. lăsa blocuri nu ajuta prea mult la înțelegerea testelor. Acest lucru nu este la fel de banal ca ar putea suna la început, mai ales dacă sunt implicați și alți dezvoltatori care au nevoie să vă citească și munca.

Acest tip de confuzie devine mult mai scump cu cât sunt implicați mai mulți dezvoltatori. Nu este nevoie de mult timp, dacă trebuie să vânați lăsa referiri de mai multe ori, este, de asemenea, proastă, deoarece ar fi putut fi evitată cu foarte puține eforturi. Claritatea este rege, fără îndoială despre asta. Un alt argument pentru a păstra aceste date în linie este că suita dvs. de testare va fi mai puțin fragilă. Nu doriți să construiți o casă de cărți care să devină mai instabilă cu fiecare lăsa care ascunde detaliile din fiecare test. Probabil că ați învățat că folosirea variabilelor globale nu este o idee bună. In acest sens, lăsa este semi-globală în fișierele dvs. de spec.

O altă problemă este că va trebui să testați o mulțime de variații diferite, diferite stări pentru scenarii similare. În curând veți rămâne fără nume lăsa declarații care să acopere toate versiunile pe care le-ați putea avea nevoie - sau să se încheie cu o haystack de tone de variații de stat numite în mod similar. Când setați datele în fiecare test direct, nu aveți această problemă. Variabilele locale sunt ieftine, pot fi ușor de citit și nu se împacă cu alte domenii. De fapt, ele pot fi și mai expresive, deoarece nu este nevoie să luați în considerare multe alte teste care ar putea avea o problemă cu un anumit nume. Doriți să evitați crearea unui alt DSL pe partea de sus a cadrului pe care toată lumea trebuie să o descifra pentru fiecare test pe care îl utilizează lăsa. Sper că se simte foarte mult ca o pierdere a timpului tuturor.

  • inainte de & după

Salvați lucruri de genul inainte de, după și variațiile sale pentru ocazii speciale și nu-l utilizați tot timpul, peste tot. Vedeți-l ca una dintre marile arme pe care le trageți pentru meta. Curățarea datelor dvs. este un bun exemplu care este prea meta pentru fiecare test individual de tratat. Vrei să extragi asta, bineînțeles.

Oaspeții misteriali

Adesea ați pus lăsa chestii în partea de sus a unui fișier și ascunde aceste detalii de la alte teste care le folosesc merge în jos fișier. Doriți ca informațiile și datele relevante să fie cât mai apropiate posibil de partea în care exersați într-adevăr testul nu mai departe de kilometri, făcând testele individuale mai obscure. 

În cele din urmă, se simte ca o frânghie prea multă să te agiți, pentru că lăsa introduce programe de distribuție pe scară largă. Acest lucru se încadrează în esență la datele testului inactiv, al căror domeniu de aplicare nu este suficient de strâns. 

Acest lucru duce ușor la un miros major numit "oaspete mister". Aceasta înseamnă că aveți date de testare care apar din nicăieri sau pur și simplu sunt asumate. Veți avea nevoie de multe ori să le vânați mai întâi pentru a înțelege un test - mai ales dacă a trecut ceva timp de când ați scris codul sau dacă sunteți nou într-o bază de coduri. Este mult mai eficient să definiți datele de testare inline exact acolo unde aveți nevoie - în configurarea unui anumit test și nu într-un domeniu mult mai larg.

Agent Spec

... descrie agentul, "#print_favorite_gadget" face "imprimă numele agenților, rangul și gadgetul preferat" (agent.print_favorite_gadget) .to eq ("Commander Bond are ceva pentru Aston Martins") end end

Când te uiți la asta, citește destul de bine, nu? Este succinct, un unic, destul de curat, nu? Să nu ne păcăm. Acest test nu ne spune prea multe despre agent în discuție, și nu ne spune întreaga poveste. Detaliile implementării sunt importante, dar nu vedem nimic din ele. Agentul pare să fi fost creat în altă parte și ar fi trebuit să îl urmărim mai întâi pentru a înțelege pe deplin ce se întâmplă aici. Deci, poate arata elegant la suprafata, dar vine cu un pret mare.

Da, testele tale nu s-ar putea sfârși prin a fi foarte uscate tot timpul în această privință, dar acesta este un mic preț pentru a fi mai expresiv și mai ușor de înțeles, cred. Sigur că există excepții, însă ele ar trebui să fie aplicate doar la circumstanțe excepționale după ce ați epuizat opțiunile pure Ruby oferite imediat. 

Cu un oaspete misterios, trebuie să aflați de unde provin datele, de ce contează și care sunt specificul ei. Nu văd detaliile implementării într-un anumit test, ceea ce face ca viața ta să fie mai greu decât trebuie. Vreau sa spun ca faci ceea ce simti daca lucrezi la proiectele tale, dar cand sunt implicati alti dezvoltatori, ar fi mai bine sa te gandesti sa-ti faci experienta cu codul tau cat mai neted. 

Ca și în multe lucruri, desigur, chestiile esențiale se află în detalii, și nu doriți să vă păstrați pe voi înșivă și pe ceilalți în întuneric. Lizibilitatea, succintul și comoditatea lăsa nu ar trebui să vină cu prețul de a pierde claritatea asupra detaliilor implementării și a direcției greșite. Doriți fiecărui test individual să spuneți întreaga poveste și să oferiți întregul context pentru a înțelege imediat acest lucru.

Cod inline

Povestea scurtă, doriți să aveți teste care sunt ușor de citit și mai ușor de înteles despre testul bazat pe test. Încercați să specificați tot ce aveți nevoie în testul real - și nu mai mult decât atât. Acest tip de deșeuri începe să "miroasă" la fel ca orice alt fel de junk. Asta presupune, de asemenea, că trebuie să adăugați detaliile de care aveți nevoie pentru teste specifice cât mai târziu posibil - atunci când creați datele de testare în ansamblu, în cadrul scenariului real și nu într-un loc îndepărtat. Utilizarea sugerată a lăsa oferă un alt tip de confort care pare să se opună acestei idei.

Să facem un alt pas cu exemplul precedent și să îl implementăm fără chestia cu clienții misterului. În soluția de mai jos, vom găsi toate informațiile relevante pentru testul inline. Putem să rămânem în acest spec dacă nu reușește și nu trebuie să caute informații suplimentare în alt loc.

Agent Spec

... descrie agentul, "#print_favorite_gadget" face "imprimă numele agentului, rangul și gadgetul favorit" do agent = agent.new (nume: "James Bond", rang: "Commander", favorite_gadget: "Aston Martin" (agent.print_favorite_gadget) .pentru eq ("Commander Bond are ceva pentru Aston Martins") end end

Ar fi frumos dacă lăsa permiteți-vă să configurați date de testare barebage pe care le-ați putea îmbunătăți pe baza nevoii de a cunoaște în fiecare test specific, dar acest lucru nu este lăsa se rostogolește. Așa se utilizează fabricile prin Factory Girl în zilele noastre. 

Vă voi oferi detalii, mai ales că am scris deja câteva detalii despre el. Iată articolele 101 și 201 personalizate despre ceea ce Factory Girl are de oferit - dacă sunteți deja curios despre asta. Este scris pentru dezvoltatori fără ton de experiență, de asemenea.

Să aruncăm o privire la un alt exemplu simplu, care să utilizeze bine datele de testare care sunt configurate în linie:

Agent Spec

descrie agentul, "#current_mission" face "imprimă starea actuală a misiunii agentului și obiectivul său" do mission_octopussy = Mission.new (nume: 'Octopussy', obiectiv: 'Stop bad dude white') bond = Agent.new : "James Bond", statutul: "Operațiunea sub acoperire", secțiunea: "00", license_to_kill: true) bond.missions << mission_octopussy expect(bond.current_mission).to eq ('Agent Bond is currently engaged in an undercover operation for mission Octopussy which aims to stop bad white dude') end end

După cum puteți vedea, avem toate informațiile pe care acest test le are nevoie într-un singur loc și nu este nevoie să găsiți vreo specificitate în vreun alt loc. Ea spune o poveste și nu este obscură. După cum sa menționat, aceasta nu este cea mai bună strategie pentru codul DRY. Plățile sunt bune. Claritatea și lizibilitatea depășesc acest mic cod de repetiție printr-o lovitură lungă - în special în baze de coduri mari.

De exemplu, spuneți că ați scris o nouă caracteristică aparent fără legătură și brusc acest test începe să eșueze ca daune colaterale și nu ați atins acest fișier de spec.. 

Credeți că veți fi fericiți dacă aveți nevoie să descifrați mai întâi componentele de configurare pentru a înțelege și a remedia acest test înainte de a putea continua cu o caracteristică complet diferită pe care lucrați? Nu cred! Doriți să ieșiți din această spec. "Fără legătură" cât mai curând posibil și să vă întoarceți la finalizarea celeilalte caracteristici. 

Când găsiți toate datele de testare chiar acolo unde testele dvs. vă indică unde nu reușește, creșteți-vă șansele printr-o lovitură lungă de fixare a acestui lucru rapid fără a "descărca" o parte complet diferită a aplicației în creierul dvs..

Metode de extragere

Puteți curăța și usca codul în mod semnificativ prin scrierea propriilor metode de ajutor. Nu este nevoie să utilizați RSpec DSL pentru ceva la fel de ieftin ca o metodă Ruby. 

Să presupunem că ați găsit câteva seturi repetitive care încep să se simtă puțin murdare. În loc să meargă cu a lăsa sau a subiect, defini o metodă în partea de jos a unui bloc descrie-o convenție-și extrage comunalitățile în ea. Dacă este folosit puțin mai mult într-un fișier, îl puteți plasa și în partea de jos a fișierului. 

Un efect secundar frumos este că nu aveți de-a face cu nici o variabilă semi-globală în acest fel. De asemenea, vă veți salva de la a face o mulțime de schimbări peste tot, dacă aveți nevoie să tweak datele un pic. Acum puteți merge într-un loc central unde metoda este definită și afectează toate locurile folosite simultan. Nu-i rău!

Agent Spec

descrie agentul, "#current_status" face "speculează despre alegerea agentului de destinație dacă statutul este vacanță" do bond = Agent.new (nume: "James Bond", statutul: "În vacanță", secțiunea: '00', license_to_kill : adevărat) așteptați (bond.current_status) .to eq ("Commander Bond este în vacanță, probabil în Bahamas") sfârșitul "speculează alegerea destinatarului dacă statutul este vacanță" nu q = Agent.new 'Q', starea: 'În vacanță', secțiunea: '00', license_to_kill: true) așteptați (q.current_status) .to eq ('

După cum puteți vedea, există un cod de configurare repetitiv și dorim să evităm să scriem acest lucru din nou și din nou. În schimb, vrem să vedem doar esențialele acestui test și să avem o metodă de a construi restul obiectului pentru noi.

Agent Spec

descrie agentul, "#current_status" face "speculează despre alegerea agentului de destinație dacă statutul este vacanța" do bond = build_agent_on_vacation ("James Bond", "În vacanță") așteptați (bond.current_status) este în concediu, probabil în Bahamas ")" se speculează cu privire la alegerea destinatarului în cazul în care starea este vacanța "do q = build_agent_on_vacation ('Q', 'On Vacation') așteptați (q.current_status) .to eq (Numele, starea: status, sectiunea: '00', license_to_kill: true) sfarsitul sfarsit set_agent_on_vacation (nume, status) Agent.new

Acum, metoda noastră extrasă are grijă de secțiune și licence_to_kill și astfel nu ne distrage atenția de la esențele testului. Bineînțeles, acesta este un exemplu fals, dar puteți să-i diminuați complexitatea la fel de mult cum aveți nevoie. Strategia nu se schimbă. Este o tehnică foarte refactorizantă - de aceea o introduc mai devreme - dar una dintre cele mai eficiente. De asemenea, face ca acesta să devină aproape un avantaj pentru a evita instrumentele de extragere oferite de RSpecs.

Ceea ce trebuie să acordați atenție este cât de expresive pot fi aceste metode de ajutor fără să plătiți niciun preț suplimentar.

Gândurile finale

Evitarea câtorva părți din RSpec DSL și folosirea bunelor principii de programare bazate pe Ruby și Object Oriented este o modalitate bună de a aborda scrierea testelor. Puteți folosi în mod liber esențialele, descrie, context și aceasta, desigur. 

Găsiți un motiv bun pentru a utiliza alte părți ale RSpec și pentru a le evita atâta timp cât puteți. Doar pentru că lucrurile pot părea convenabile și fantezie nu este un motiv suficient de bun pentru a le folosi - este mai bine să păstrați lucrurile mai simple. 

Simplu este bine; ține testele dvs. sănătoase și rapide.

Cod