Upload
roberto-messora
View
420
Download
0
Embed Size (px)
DESCRIPTION
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.
Citation preview
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
WEB09 - Unit testing con JavaScript
Roberto Messora
[email protected] - @robymes
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
Grazie a
Sponsor
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
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
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
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
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
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
• 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 });});
Setup e teardown
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
demoUna semplice suite di test
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
• Eseguire una suite di test con Jasmine è abbastanza semplice, basta una pagina HTML opportunamente configurata
Test Runner
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
demoTest runner con Jasmine e Visual Studio
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
• 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);…
Spies
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
demoSpies e mocks
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
• 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});
Supporto per Async
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
• 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
Test Automation
#CDays14 – Milano 25, 26 e 27 Febbraio 2014
Q&ATutto 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