Dette er sannsynligvis ikke den første opplæringen om testing som du noensinne har sett. Men kanskje du har hatt tvil om å teste, og aldri tok deg tid til å lese dem. Tross alt kan det virke som ekstra arbeid uten grunn.
Denne opplæringen har til hensikt å endre dine synspunkter. Vi skal begynne i begynnelsen: hva er testing og hvorfor skal du gjøre det? Deretter snakker vi kort om å skrive testbar kode, før du faktisk vet, gjør noen test! La oss komme til det!
Helt enkelt, testing er ideen om å ha et sett krav som et bestemt stykke kode må passere for å være robust nok til å bli brukt i den virkelige verden. Ofte skriver vi litt JavaScript og åpner det i nettleseren og klikker litt rundt for å sikre at alt fungerer som vi ville forvente. Selv om det noen ganger er nødvendig, er det ikke typen testing vi snakker om her. Faktisk håper jeg at denne opplæringen vil overbevise deg om at hurtig og skitten selvtest skal utfylle en mer stiv testprosedyre: selvtesting er bra, men en grundig liste over krav er avgjørende.
Som du kanskje gjetter, er problemet med JavaScript-testen for oppdatering og klikk dobbelt:
Ved å skrive tester som kontrollerer alt koden din burde gjøre, kan du bekrefte at koden din er i beste form før du faktisk bruker den på et nettsted. Når noe faktisk kjører i en nettleser, er det sannsynligvis flere feilpunkter. Skrivingstester lar deg fokusere på hver testbar del enkeltvis; hvis hvert stykke gjør sin jobb riktig, bør ting samarbeide uten problem (testing av enkelte deler som dette kalles enhetstesting).
Hvis du er en programmeringspolyglot), har du kanskje gjort testing på andre språk. Men jeg har funnet testing i JavaScript et annet dyr å drepe. Tross alt bygger du ikke for mange brukergrensesnitt i, for eksempel PHP eller Ruby. Ofte gjør vi DOM-arbeid i JavaScript, og hvordan tester du det?
Vel, DOM-arbeidet er ikke det du vil skrive tester for; det er logikken. Åpenbart, så er nøkkelen her å skille logikken din og din UI-kode. Dette er ikke alltid lett; Jeg har skrevet min rettferdige andel av jQuery-drevet brukergrensesnitt, og det kan bli ganske rotete ganske raskt. Ikke bare gjør det vanskelig å teste, men sammenflettet logikk og UI-kode kan også være vanskelig å endre når den ønskede oppførselen endres. Jeg har funnet å bruke metoder som maler (også maler) og pub / sub (også pub / sub) gjør å skrive bedre, mer testbar kode lettere.
En ting til, før vi begynner koding: hvordan skriver vi testene våre? Det er mange testbiblioteker som du kan bruke (og mange gode opplæringsprogrammer for å lære deg å bruke dem, se linkene som enden). Vi skal imidlertid bygge et lite testbibliotek fra bunnen av. Det vil ikke være så fancy som noen biblioteker, men du får se nøyaktig hva som skjer.
Med dette i tankene, la oss komme på jobb!
Vi skal bygge et mikrofotogalleri: En enkel liste over miniatyrer, med ett bilde som viser full størrelse over dem. Men først, la oss bygge ut testfunksjonen.
Når du lærer mer om testing og testing av biblioteker, finner du mange testmetoder for å teste alle typer spesifikasjoner. Men det kan alle bli kokt ned på om to ting er like eller ikke: for eksempel,
Så, her er vår metode for å teste for likestilling:
var TEST = areEqual: funksjon (a, b, msg) var result = (a === b); console.log ((result? "PASS:": "FAIL:") + msg); returresultat; ;
Det er ganske enkelt: metoden tar tre parametere. De to første er sammenlignet, og hvis de er like, går testene. Den tredje parameteren er en melding som beskriver testen. I dette enkle testbiblioteket skriver vi bare ut testene våre til konsollen, men du kan lage HTML-utdata med riktig CSS-styling hvis du vil.
Her er areNotEqual
metode (innenfor det samme TEST
gjenstand):
areNotEqual: funksjon (a, b, msg) var result = (a! == b); console.log ((result? "PASS:": "FAIL:") + msg); returresultat;
Du vil legge merke til de to siste linjene i er like
og areNotEqual
det samme. Så, vi kan trekke dem ut som dette:
var TEST = areEqual: funksjon (a, b, msg) return this.output (a === b, msg), er ikke ekvivalent: funksjon (a, b, msg) return this._output (a! == b, msg); , _output: funksjon (resultat, msg) konsoll [resultat? "logg": "advare"] ((resultat? "PASS:": "FAIL:") + msg); returresultat; ;
Flott! Ryddig ting her er at vi kan legge til andre "sukker" metoder ved hjelp av metodene vi allerede har skrevet:
TEST.isTypeOf = funksjon (obj, type, msg) return this.areEqual (typeof obj, type, msg); ; TEST.isAnInstanceOf = funksjon (obj, type, msg) return this._output (obj instanceof type, msg); TEST.isGreaterThan = funksjon (val, min, msg) return this._output (val> min, msg);
Du kan eksperimentere med dette alene; Etter å ha gått gjennom denne opplæringen, har du en god ide om hvordan du bruker den.
Så la oss lage et super-enkelt fotogalleri ved hjelp av vår mini TEST
rammeverk for å lage noen tester. Jeg nevner her at mens testdrevet utvikling er en god praksis, vil vi ikke bruke den i denne opplæringen, hovedsakelig fordi det ikke er noe du kan lære i en enkelt opplæring; det tar mye øvelse for å virkelig Grok. Når du starter, er det lettere å skrive litt kode og deretter teste den.
Så, la oss starte. Selvfølgelig trenger vi noen HTML for vårt galleri. Vi vil holde dette ganske grunnleggende:
Testing i JavaScript
Det er to hovedpunkter verdt å merke seg her: først har vi en som holder veldig enkelt oppslag for vårt bildegalleri. Nei, det er sannsynligvis ikke veldig robust, men det gir oss noe å jobbe med. Legg merke til at vi trekker opp tre
>