Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Javascript Unit Testing

476 views

Published on

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.

Published in: Technology
  • Be the first to comment

Javascript Unit Testing

  1. 1. WEB09 - Unit testing con JavaScript Roberto Messora roberto@messora.com - @robymes #CDays14 – Milano 25, 26 e 27 Febbraio 2014
  2. 2. Grazie a Sponsor #CDays14 – Milano 25, 26 e 27 Febbraio 2014
  3. 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. 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. 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. 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. 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. 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
  9. 9. demo Una semplice suite di test #CDays14 – Milano 25, 26 e 27 Febbraio 2014
  10. 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. 11. demo Test runner con Jasmine e Visual Studio #CDays14 – Milano 25, 26 e 27 Febbraio 2014
  12. 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
  13. 13. demo Spies e mocks #CDays14 – Milano 25, 26 e 27 Febbraio 2014
  14. 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. 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. 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

×