Abbiamo sdoganato JavaScript a tutti i livelli: è diventato un linguaggio di programmazione di prima classe e ne abbiamo cominciato a conoscere i segreti e le caratteristiche. Ma non basta, le applicazioni web client si fanno sempre più complesse e non è pensabile fare debug solo a colpi di F5 e Firebug. In questa sessione vi svelerò un segreto: anche in Javascript è possibile fare Unit Testing, darò alcune indicazioni su come organizzare la codebase in modo da farlo con intelligenza.
3. Agenda
•
Prima dello Unit Testing: coding standards con JSLint
•
Javascript Unit Testing con Jasmine
•
Unit Testing in salsa BDD: Describe
Specifications
Expecations
Matchers
Spies
Automazione dello Unit Testing
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
4. Coding Standards
•
Prima ancora di pensare allo Unit Testing è necessario
pensare ad uno standard di scrittura del codice Javascript
•
JSLint non è sindacabile quando si tratta di scrivere codice
Javascript:
Il nostro codice girerà su una serie di browser diversi che usano
interpreti diversi
Il nostro codice molto probabilmente verrà minificato, le probabilità
che continui a funzionare aumentano se il sorgente è scritto
correttamente dal punto di vista formale
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
5. Framework di Unit Testing
•
Esistono diversi framework di Unit Testing Javascript
•
QUnit
Jasmine
Mocha
…
In questa sessione valuteremo Jasmine per la sua capacità
espressiva simile al BDD (Behavior Driven Design)
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
6. Specification
•
In Jasmine è possibile definire specification e raggrupparle tramite
le funzioni globali it e describe
describe("A suite", function() {
it("contains spec with expectations", function() {
//expectations
});
});
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
7. Expectations
•
In Jasmine è possibile definire le expectations tramite la funzione
globale expect abbinata ad una serie di matchers predefiniti
describe("A suite", function() {
it("contains spec with expectations", function() {
expect(true).toBe(true);
});
});
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
8. Setup e teardown
•
In Jasmine è possibile eseguire funzioni di setup e teardown prima e dopo ogni
singola specification utilizzando le funzioni globali beforeEach e afterEach
describe("A suite", function() {
beforeEach(function() {
//setup
});
afterEach(function() {
//teardown
});
it("contains spec with expectations", function() {
//expectations
});
});
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
10. Test Runner
•
Eseguire una suite di test con Jasmine è abbastanza semplice, basta
una pagina HTML opportunamente configurata
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
11. demo
Test runner con Jasmine e Visual Studio
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
12. Spies
•
Le peculiarità di Javascript in quanto linguaggio in cui le funzioni
sono first class objects, permettono di creare spie e mock di
oggetti senza ricorrere a framework particolari come accade in altri
linguaggi
spyOn(myObj, "myObjMethod");
myObj.myObjMethod(2);
expect(myObj.myObjMethod).toHaveBeenCalled();
expect(myObj.myObjMethod).toHaveBeenCalledWith(2);
…
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
14. Supporto per Async
•
Jasmine offre anche la possibilità di testare metodi asincroni
runs(function() {
//chiamata al metodo async
});
waitsFor(function() {
//poll finchè non ritorna true o va in timeout
}, “Error Message", 750);
runs(function() {
//expectations
});
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
15. Test Automation
• Automatizzare
il processo di esecuzione delle suite di Test
è possibile tramite ambienti di automazione come Karma
che permettono anche di:
Eseguire le suite di Test su differenti browser tramite Phantom JS
Integrare le suite di Test in ambienti di Continuous Integration
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
16. Q&A
Tutto il materiale di questa sessione su
http://www.communitydays.it/
Lascia il feedback su questa sessione,
potrai essere estratto per i nostri premi!
Seguici su
Twitter @CommunityDaysIT
Facebook http://facebook.com/cdaysit
#CDays14
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
Hinweis der Redaktion
Slide da mostrare prima di iniziare la sessione – non rimuovere!