Welcome to the Cookbook

loading...

4.7.7 Tester les Assistants

Puisqu'un pourcentage respectable de la logique réside dans les classes Assistant (Helper), il est important de s'assurer que ces classes sont couvertes par les cas de test.

Le test d'Assistant est un brin similaire à l'approche utilisée pour les Composants. Supposez que nous ayons un assistant appelé InterpreteurDeMonnaieHelper situé dans app/views/helpers/interpreteur_de_monnaie_helper.php accompagné de son fichier de cas de test situé dans app/tests/cases/helpers/interpreteur_de_monnaie_helper.test.php

4.7.7.1 Créer un test d'Assistant, 1ère partie

Pour commencer, nous définirons les responsabilités de notre assistant DevisesFormateurHelper. En gros, il aura deux méthodes, juste pour les besoins de la démonstration :

function dollar($montant)

Cette fonction recevra le montant à formater. Celui-ci prendra 2 décimales, avec les espaces manquants remplis par des zéros et le préfixe 'USD' ajouté.

function euro($montant)

Cette fonction fera la même chose que dollar() mais préfixera le montant retourné avec 'EUR'. Juste pour rendre le tout un peu plus complexe, nous allons aussi entourer le résultat par des balises span :

<span class="euro"></span> 
  1. <span class="euro"></span>

Créons d'abord les tests :

<?php

//Importe l'assistant à tester.
//Si l'assistant testé doit utiliser d'autres assistants, comme Html, 
//ils devront être importés dans cette ligne et instanciés dans startTest().
App::import('Helper', 'DevisesFormateur');

class DevisesFormateurTest extends CakeTestCase {
    private $devisesFormateur = null;

    //Ici nous instancions notre assistant et tous les autres dont nous avons besoin.
    public function startTest() {
        $this->devisesFormateur = new DevisesFormateurHelper();
    }

    //test de la fonction dollar().
    public function testDollar() {
        $this->assertEqual('USD 5,30', $this->devisesFormateur->dollar(5,30));
	    //On devrait toujours avoir deux chiffres après la virgule.
        $this->assertEqual('USD 1,00', $this->devisesFormateur->dollar(1));
        $this->assertEqual('USD 2,05', $this->devisesFormateur->dollar(2,05));
        //Test du séparateur de milliers
        $this->assertEqual('USD 12 000,70', $this->devisesFormateur->dollar(12 000,70));
    }
}
  1. <?php
  2. //Importe l'assistant à tester.
  3. //Si l'assistant testé doit utiliser d'autres assistants, comme Html,
  4. //ils devront être importés dans cette ligne et instanciés dans startTest().
  5. App::import('Helper', 'DevisesFormateur');
  6. class DevisesFormateurTest extends CakeTestCase {
  7. private $devisesFormateur = null;
  8. //Ici nous instancions notre assistant et tous les autres dont nous avons besoin.
  9. public function startTest() {
  10. $this->devisesFormateur = new DevisesFormateurHelper();
  11. }
  12. //test de la fonction dollar().
  13. public function testDollar() {
  14. $this->assertEqual('USD 5,30', $this->devisesFormateur->dollar(5,30));
  15. //On devrait toujours avoir deux chiffres après la virgule.
  16. $this->assertEqual('USD 1,00', $this->devisesFormateur->dollar(1));
  17. $this->assertEqual('USD 2,05', $this->devisesFormateur->dollar(2,05));
  18. //Test du séparateur de milliers
  19. $this->assertEqual('USD 12 000,70', $this->devisesFormateur->dollar(12 000,70));
  20. }
  21. }

Ici, nous appelons dollar() avec différents paramètres et nous demandons à la suite de test de vérifier si les valeurs retournées sont égales à ce qui est attendu.

Exécuter le test maintenant provoquera des erreurs (parce que DevisesFormateurHelper n'existe même pas) montrant que nous avons 3 échecs.

Une fois que nous savons ce que notre méthode devrait faire, nous pouvons écrire la méthode elle-même :

<?php
class DevisesFormateurHelper extends AppHelper {
    public function dollar($montant) {
        return 'USD ' . number_format($montant, 2, ',', ' ');
    }
}
  1. <?php
  2. class DevisesFormateurHelper extends AppHelper {
  3. public function dollar($montant) {
  4. return 'USD ' . number_format($montant, 2, ',', ' ');
  5. }
  6. }

Ici nous définissons le nombre de décimales à 2, le séparateur de décimale à la virgule, le séparateur des milliers à l'espace et le préfixe du nombre formaté à la chaîne 'USD'.

Enregistrez çà dans app/views/helpers/devises_formateur.php et exécutez le test. Vous devriez voir une barre verte et un message indiquant 4 passes.