Personal tools

Aug 09, 2012

Integrazione continua del codice JavaScript in Plone con Buster.js

L'importanza di rilasciare codice JavaScript testato su più piattaforme è una priorità per molte applicazioni web. In questo post vi parlerò di uno strumento che facilita l'esecuzione di test unitari non assistiti su codice JavaScript.

Oggi come oggi uno sviluppatore di siti web deve tenere conto del fatto che il risultato del proprio lavoro, nella stragrande maggioranza dei casi, verrà fruito usando dispositivi dalle caratteristiche più svariate.

Capita sempre più spesso che le richieste del cliente convergano nel richiedere un sito con un design responsivo, fruibile tanto sul touchscreen di un telefonino quanto sul ben più ampio schermo di una postazione desktop, veloce e performante sia su rete mobile che su rete fissa.

Sfruttare al massimo le potenzialità offerte da JavaScript è ormai diventato un imperativo categorico per soddisfare queste richieste, tanto è vero che oramai si parla di applicazioni JavaScript.

Per raggiungere l'obiettivo è necessario scrivere codice ottimizzato e a prova di browser. Chi lavora nell'ambiente non può non accorgersi dell'enorme progresso a cui si è assistito negli ultimi anni e del fermento tutt'ora in atto.

Ovviamente Plone, che da sempre è "sul pezzo", sta seguendo questa strada, aumentando sempre più le funzionalità che si appoggiano su questo linguaggio.

Essendo gli script e le applicazioni JavaScript eseguite "lato client", ovvero dal browser, l'unico modo per accertarsi del loro corretto funzionamento consiste nel farle testare direttamente dalla moltitudine di combinazioni di browser e sistema operativo che verranno adottati dagli utenti del sito.

Farlo in maniera non automatizzata richiede un quantitivo esoso di tempo e per questo sono nati dei framework che permettono di scrivere test automatici, ad esempio QUnitSinon.JSJasmine.

Durante l'ultimo Europython ho avuto il piacere di collaborare con Balázs Reé aiutandolo nella realizzazione di un progetto guida per dimostrare come si potesse andare oltre, passando dai test unitari del codice JavaScript alla continous integration multibrowser!

Buster.JS

busterlogo.png

Per raggiungere questo fine si è deciso di utilizzare Buster.JS, un framework che mette a disposizione un servizio web accessibile via browser.

Per una descrizione dettagliata delle possibilità del servizio vi rimando alla documentazione ufficiale, io per il momento mi limiterò ad esporre il concetto che sta alla base del servizio.

Una volta avviato il server Buster.JS, nella Home Page del sito compare un bottone gigante "Capture Browser" che, se cliccato, porta su una pagina che tiene aperta la comunicazione tra il browser e il server. Mantenendo aperta questa pagina il browser dichiara al server di essere disponibile per l'esecuzione dei test che il server vorrà inviargli.

ALL YOUR BROWSER ARE BELONG TO US

E' possibile connettere più browser contemporaneamente realizzando così una rete di tester multipiattaforma. Quando il server invoca il comando "buster test", i test vengono inviati simultaneamente ai client connessi che risponderanno con l'esito dei test.

Buster.JS supporta nativamente Sinon.JS, ma nulla vieta di utilizzare qualsiasi altro framework, come ad esempio i già citati QUnit e Jasmine.

Come caso d'uso per questa azione dimostrativa si è deciso di testare il prodotto archetype.querywidget di Plone, il pacchetto che mette ha disposizione l'interfaccia di costruzione delle nuove collezioni di Plone4.

Il codice realizzati durante lo sprint di Europython è pubblicato su github e l'aspettativa è quella di aggiungere al server di integrazione continua di Plone le suite di test Buster.JS di prodotti chiave per la funzionalità di Plone.

Making movies

Vi lascio con il video dimostrativo realizzato sotto la direzione del grande regista Balázs l'ultimo giorno di Europython2012.

Filed under: , , , ,
comments powered by Disqus