Le javascript
Un ami du php souvent délaissé lors des tests
PHP’tit Déj
«Intégration Continue»
16.05.2013 - Luxembourg
mercredi 22 mai 13
Présentation
Frédéric Dewinne
= Consultant @ VA Consulting
= Architecte logiciel, formateur, coach
= Expert PHP / JS depuis 2007
mercredi 22 mai 13
Le javascript
mercredi 22 mai 13
Le javascript
≠ langage de présentation
mercredi 22 mai 13
Le javascript
≠ langage de présentation
= langage de programmation
mercredi 22 mai 13
Le javascript
≠ langage de présentation
= langage de programmation
= langage événementiel
mercredi 22 mai 13
Le javascript
≠ langage de présentation
= langage de programmation
= langage événementiel
= s’exécute sur un client, un serveur ou isolé
(applications Windows 8)
mercredi 22 mai 13
Le javascript
≠ langage de présentation
= langage de programmation
= langage événementiel
= s’exécute sur un client, un serveur ou isolé
(applications Windows 8)
mercredi 22 mai 13
Problématique dans le cadre d’un site web
mercredi 22 mai 13
Problématique dans le cadre d’un site web
= le client utilisé
(OS, type et version de navigateur, ...)
mercredi 22 mai 13
Problématique dans le cadre d’un site web
= le client utilisé
(OS, type et version de navigateur, ...)
= la testabilité du code
mercredi 22 mai 13
Problématique dans le cadre d’un site web
= le client utilisé
(OS, type et version de navigateur, ...)
= la testabilité du code
= la détection des erreurs
mercredi 22 mai 13
Comment procéder dès lors ?
mercredi 22 mai 13
Comment procéder dès lors ?
= écrire du code réutilisable
plugins, widgets, prototypes, ...
mercredi 22 mai 13
Comment procéder dès lors ?
= écrire du code réutilisable
plugins, widgets, prototypes, ...
= et testable
Test Driven Development (TDD)
mercredi 22 mai 13
Comment procéder dès lors ?
= écrire du code réutilisable
plugins, widgets, prototypes, ...
= et testable
Test Driven Development (TDD)
= tester le code sur différents clients
mercredi 22 mai 13
JsTestDriver
mercredi 22 mai 13
JsTestDriver
= initié par Google
mercredi 22 mai 13
JsTestDriver
= initié par Google
= framework de test
mercredi 22 mai 13
JsTestDriver
= initié par Google
= framework de test
= support d’autres frameworks de test
mercredi 22 mai 13
JsTestDriver
= initié par Google
= framework de test
= support d’autres frameworks de test
= serveur http pour une exécution client / serveur
mercredi 22 mai 13
JsTestDriver
= initié par Google
= framework de test
= support d’autres frameworks de test
= serveur http pour une exécution client / serveur
= proxy web pour les dépendances
mercredi 22 mai 13
JsTestDriver
= initié par Google
= framework de test
= support d’autres frameworks de test
= serveur http pour une exécution client / serveur
= proxy web pour les dépendances
= exécutable en ligne de commande
mercredi 22 mai 13
JsTestDriver
= initié par Google
= framework de test
= support d’autres frameworks de test
= serveur http pour une exécution client / serveur
= proxy web pour les dépendances
= exécutable en ligne de commande
= plugins pour IDE
mercredi 22 mai 13
JsTestDriver
= initié par Google
= framework de test
= support d’autres frameworks de test
= serveur http pour une exécution client / serveur
= proxy web pour les dépendances
= exécutable en ligne de commande
= plugins pour IDE
= plugin de code coverage
mercredi 22 mai 13
Exemple
TestCase('form-collection-test', {
"test add fieldset on add button click": function () {
/*:DOC collection = <div><fieldset><input name="toto[0]" /></fieldset></div>*/
/*:DOC addButton = <button></button>*/
$(this.collection).formCollection({
addButtonSelector: this.addButton,
template: '<fieldset><input name="toto[__index__]" /></fieldset>',
childrenSelector: 'fieldset'
});
$(this.addButton).click();
assertEquals(2, $(this.collection).find('fieldset').length);
}
});
mercredi 22 mai 13
mercredi 22 mai 13
Et ensuite ?
mercredi 22 mai 13
Et ensuite ?
= exécuter les tests de manière automatique
mercredi 22 mai 13
Jenkins
mercredi 22 mai 13
Jenkins
= démarrage du serveur
mercredi 22 mai 13
Jenkins
= démarrage du serveur
= gestion des browsers
mercredi 22 mai 13
Jenkins
= démarrage du serveur
= gestion des browsers
= aggrégation des résultats de tests
mercredi 22 mai 13
Jenkins
= démarrage du serveur
= gestion des browsers
= aggrégation des résultats de tests
= analyse du code coverage
mercredi 22 mai 13
Résultats
mercredi 22 mai 13
Des questions ?
mercredi 22 mai 13
Merci
Frédéric Dewinne
twitter => @dwebconsulting
email => frederic.dewinne@vaconsulting.lu
mercredi 22 mai 13

Javascript in a continuous integration environment

  • 1.
    Le javascript Un amidu php souvent délaissé lors des tests PHP’tit Déj «Intégration Continue» 16.05.2013 - Luxembourg mercredi 22 mai 13
  • 2.
    Présentation Frédéric Dewinne = Consultant@ VA Consulting = Architecte logiciel, formateur, coach = Expert PHP / JS depuis 2007 mercredi 22 mai 13
  • 3.
  • 4.
    Le javascript ≠ langagede présentation mercredi 22 mai 13
  • 5.
    Le javascript ≠ langagede présentation = langage de programmation mercredi 22 mai 13
  • 6.
    Le javascript ≠ langagede présentation = langage de programmation = langage événementiel mercredi 22 mai 13
  • 7.
    Le javascript ≠ langagede présentation = langage de programmation = langage événementiel = s’exécute sur un client, un serveur ou isolé (applications Windows 8) mercredi 22 mai 13
  • 8.
    Le javascript ≠ langagede présentation = langage de programmation = langage événementiel = s’exécute sur un client, un serveur ou isolé (applications Windows 8) mercredi 22 mai 13
  • 9.
    Problématique dans lecadre d’un site web mercredi 22 mai 13
  • 10.
    Problématique dans lecadre d’un site web = le client utilisé (OS, type et version de navigateur, ...) mercredi 22 mai 13
  • 11.
    Problématique dans lecadre d’un site web = le client utilisé (OS, type et version de navigateur, ...) = la testabilité du code mercredi 22 mai 13
  • 12.
    Problématique dans lecadre d’un site web = le client utilisé (OS, type et version de navigateur, ...) = la testabilité du code = la détection des erreurs mercredi 22 mai 13
  • 13.
    Comment procéder dèslors ? mercredi 22 mai 13
  • 14.
    Comment procéder dèslors ? = écrire du code réutilisable plugins, widgets, prototypes, ... mercredi 22 mai 13
  • 15.
    Comment procéder dèslors ? = écrire du code réutilisable plugins, widgets, prototypes, ... = et testable Test Driven Development (TDD) mercredi 22 mai 13
  • 16.
    Comment procéder dèslors ? = écrire du code réutilisable plugins, widgets, prototypes, ... = et testable Test Driven Development (TDD) = tester le code sur différents clients mercredi 22 mai 13
  • 17.
  • 18.
    JsTestDriver = initié parGoogle mercredi 22 mai 13
  • 19.
    JsTestDriver = initié parGoogle = framework de test mercredi 22 mai 13
  • 20.
    JsTestDriver = initié parGoogle = framework de test = support d’autres frameworks de test mercredi 22 mai 13
  • 21.
    JsTestDriver = initié parGoogle = framework de test = support d’autres frameworks de test = serveur http pour une exécution client / serveur mercredi 22 mai 13
  • 22.
    JsTestDriver = initié parGoogle = framework de test = support d’autres frameworks de test = serveur http pour une exécution client / serveur = proxy web pour les dépendances mercredi 22 mai 13
  • 23.
    JsTestDriver = initié parGoogle = framework de test = support d’autres frameworks de test = serveur http pour une exécution client / serveur = proxy web pour les dépendances = exécutable en ligne de commande mercredi 22 mai 13
  • 24.
    JsTestDriver = initié parGoogle = framework de test = support d’autres frameworks de test = serveur http pour une exécution client / serveur = proxy web pour les dépendances = exécutable en ligne de commande = plugins pour IDE mercredi 22 mai 13
  • 25.
    JsTestDriver = initié parGoogle = framework de test = support d’autres frameworks de test = serveur http pour une exécution client / serveur = proxy web pour les dépendances = exécutable en ligne de commande = plugins pour IDE = plugin de code coverage mercredi 22 mai 13
  • 26.
    Exemple TestCase('form-collection-test', { "test addfieldset on add button click": function () { /*:DOC collection = <div><fieldset><input name="toto[0]" /></fieldset></div>*/ /*:DOC addButton = <button></button>*/ $(this.collection).formCollection({ addButtonSelector: this.addButton, template: '<fieldset><input name="toto[__index__]" /></fieldset>', childrenSelector: 'fieldset' }); $(this.addButton).click(); assertEquals(2, $(this.collection).find('fieldset').length); } }); mercredi 22 mai 13
  • 27.
  • 28.
  • 29.
    Et ensuite ? =exécuter les tests de manière automatique mercredi 22 mai 13
  • 30.
  • 31.
    Jenkins = démarrage duserveur mercredi 22 mai 13
  • 32.
    Jenkins = démarrage duserveur = gestion des browsers mercredi 22 mai 13
  • 33.
    Jenkins = démarrage duserveur = gestion des browsers = aggrégation des résultats de tests mercredi 22 mai 13
  • 34.
    Jenkins = démarrage duserveur = gestion des browsers = aggrégation des résultats de tests = analyse du code coverage mercredi 22 mai 13
  • 35.
  • 36.
  • 37.
    Merci Frédéric Dewinne twitter =>@dwebconsulting email => frederic.dewinne@vaconsulting.lu mercredi 22 mai 13