Dit is waarschijnlijk niet de eerste zelfstudie over testen die je ooit hebt gezien. Maar misschien heb je je twijfels gehad over testen en heb je nooit de tijd genomen om ze te lezen. Per slot van rekening kan het zonder meer extra werk lijken.
Deze zelfstudie is bedoeld om je meningen te veranderen. We beginnen bij het allereerste begin: wat is testen en waarom zou je het moeten doen? Daarna zullen we kort praten over het schrijven van testbare code, voordat we feitelijk testen doen! Laten we ernaar toe gaan!
Heel eenvoudig, testing is het idee om een reeks vereisten te hebben waaraan een bepaald stuk code moet voldoen om robuust genoeg te zijn om in de echte wereld te worden gebruikt. Vaak schrijven we wat JavaScript en openen het vervolgens in de browser en klikken een beetje rond om te controleren of alles werkt zoals we zouden verwachten. Hoewel dat soms nodig is, is dat niet het soort testen waar we het hier over hebben. Ik hoop zelfs dat deze tutorial je zal overtuigen dat quick-and-dirty zelftesten een meer rigide testprocedure moet aanvullen: zelftesten is prima, maar een grondige lijst met vereisten staat voorop.
Zoals u wellicht vermoedt, is het probleem met de JavaScript-test voor vernieuwen en klikken tweeledig:
Door te schrijven testen die alles wat uw code moet doen controleren, kunt u controleren of uw code in de beste staat is voordat u deze daadwerkelijk op een website gebruikt. Tegen de tijd dat iets daadwerkelijk in een browser wordt uitgevoerd, zijn er waarschijnlijk meerdere faalpunten. Door het schrijven van tests kunt u zich op elk testdeel afzonderlijk concentreren; als elk stuk zijn werk goed doet, zouden dingen zonder probleem moeten samenwerken (het testen van afzonderlijke onderdelen zoals deze wordt eenheidstest genoemd).
Als u een meertalige programmeertaal bent), hebt u mogelijk in andere talen getest. Maar ik heb in JavaScript een ander beest getest om te verslaan. U bouwt tenslotte niet teveel gebruikersinterfaces in, laten we zeggen, PHP of Ruby. Vaak doen we DOM-werk in JavaScript, en hoe test je dat precies?
Welnu, het DOM-werk is niet waarvoor je tests wilt schrijven; het is de logica. Het is duidelijk dat de sleutel hier is om je logica en je UI-code te scheiden. Dit is niet altijd gemakkelijk; Ik heb mijn deel van de door jQuery aangedreven UI geschreven en het kan vrij rommelig worden vrij snel. Dit maakt het niet alleen moeilijk om te testen, maar verweven logica en UI-code kunnen ook moeilijk te wijzigen zijn wanneer het gewenste gedrag verandert. Ik heb gevonden dat het gebruik van methodieken zoals sjablonen (ook sjablonen) en pub / sub (ook, pub / sub) schrijven beter maken, meer testbare code makkelijker maken.
Nog een ding, voordat we beginnen met coderen: hoe schrijven we onze tests? Er zijn talloze testbibliotheken die u kunt gebruiken (en veel goede zelfstudies om u te leren deze te gebruiken, zie de links als het einde). We gaan echter vanuit het niets een kleine testbibliotheek bouwen. Het zal niet zo luxe zijn als sommige bibliotheken, maar je zult zien wat er precies aan de hand is.
Met dit in gedachten, laten we aan het werk gaan!
We gaan een microfotogalerie maken: een eenvoudige lijst met miniaturen, met één afbeelding die de volledige grootte boven hen weergeeft. Maar laten we eerst de testfunctie uitbouwen.
Naarmate u meer leert over het testen en testen van bibliotheken, vindt u tal van testmethoden voor het testen van allerlei specifieke kenmerken. Het kan echter allemaal worden ingegeven door de vraag of twee dingen gelijk zijn of niet: bijvoorbeeld,
Dus, hier is onze methode om te testen op gelijkheid:
var TEST = areEqual: function (a, b, msg) var result = (a === b); console.log ((resultaat? "PASS:": "FAIL:") + msg); terugkeer resultaat; ;
Het is vrij eenvoudig: de methode neemt drie parameters in beslag. De eerste twee worden vergeleken en als ze gelijk zijn, gaan de tests voorbij. De derde parameter is een bericht dat de test beschrijft. In deze eenvoudige testbibliotheek voeren we onze tests gewoon uit naar de console, maar u kunt HTML-uitvoer maken met de juiste CSS-stijl als u dat wilt.
Hier is de areNotEqual
methode (binnen dezelfde TEST
voorwerp):
areNotEqual: function (a, b, msg) var result = (a! == b); console.log ((resultaat? "PASS:": "FAIL:") + msg); terugkeer resultaat;
Je zult de laatste twee regels van opmerken zijn gelijk
en areNotEqual
hetzelfde. Dus we kunnen ze eruit halen als volgt:
var TEST = areEqual: function (a, b, msg) return this._output (a === b, msg), areNotEqual: function (a, b, msg) return this._output (a! == b, msg); , _output: function (result, msg) console [result? "log": "warn"] ((resultaat? "PASS:": "FAIL:") + msg); terugkeer resultaat; ;
Super goed! Het mooie hier is dat we andere 'suiker'-methoden kunnen toevoegen met behulp van de methoden die we al hebben geschreven:
TEST.isTypeOf = function (obj, type, msg) return this.areEqual (typeof obj, type, msg); ; TEST.isAnInstanceOf = function (obj, type, msg) return this._output (obj instanceof type, msg); TEST.isGreaterThan = functie (val, min, msg) return this._output (val> min, msg);
Je kunt hier alleen mee experimenteren; na het doornemen van deze tutorial, heb je een goed idee van hoe je het moet gebruiken.
Laten we dus een supereenvoudige fotogalerij maken met onze mini TEST
kader om enkele tests te maken. Ik zal hier vermelden dat, terwijl testgestuurde ontwikkeling een goede oefening is, we deze in deze zelfstudie niet zullen gebruiken, voornamelijk omdat het niet iets is dat je in een enkele tutorial kunt leren; het kost echt veel oefening Grok. Als je begint, is het makkelijker om een beetje code te schrijven en het vervolgens te testen.
Dus laten we beginnen. Natuurlijk hebben we wat HTML nodig voor onze galerij. We houden dit vrij eenvoudig:
Testen in JavaScript
Er zijn twee belangrijke dingen die hier moeten worden opgemerkt: ten eerste hebben we een dat bevat de zeer eenvoudige opmaak voor onze afbeeldingengalerij. Nee, het is waarschijnlijk niet erg robuust, maar het geeft ons wel iets mee. Merk vervolgens op dat we er drie aan het aansluiten zijn
>