16
#CDays14 – Milano 25, 26 e 27 Febbraio 2014 WEB09 - Unit testing con JavaScript Roberto Messora [email protected] - @robymes

Javascript Unit Testing

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

Page 1: Javascript Unit Testing

#CDays14 – Milano 25, 26 e 27 Febbraio 2014

WEB09 - Unit testing con JavaScript

Roberto Messora

[email protected] - @robymes

Page 3: Javascript Unit Testing

#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

Page 4: Javascript 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

Page 5: Javascript Unit Testing

#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)

Page 6: Javascript Unit Testing

#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 });});

Page 7: Javascript Unit Testing

#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); });});

Page 8: Javascript Unit Testing

#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

Page 9: Javascript Unit Testing

#CDays14 – Milano 25, 26 e 27 Febbraio 2014

demoUna semplice suite di test

Page 10: Javascript Unit Testing

#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

Page 11: Javascript Unit Testing

#CDays14 – Milano 25, 26 e 27 Febbraio 2014

demoTest runner con Jasmine e Visual Studio

Page 12: Javascript Unit Testing

#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

Page 13: Javascript Unit Testing

#CDays14 – Milano 25, 26 e 27 Febbraio 2014

demoSpies e mocks

Page 14: Javascript Unit Testing

#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

Page 15: Javascript Unit Testing

#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

Page 16: Javascript Unit Testing

#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