Welcome to the Cookbook

loading...

4.7.8 Tester les composants

Considérons que nous voulions tester un composant appelé TransporteurComponent, qui utilise un modèle appelé Transporteur pour fournir des fonctionnalités aux autres contrôleurs. Nous utiliserons quatre fichiers :

  • Un composant appelé Transporteur situé dans app/controllers/components/transporteur.php
  • Un modèle appelé Transporteur situé dans app/models/transporteur.php
  • Une fixture appelée TransporteurTestFixture située dans app/tests/fixtures/transporteur_fixture.php
  • Le code du test situé dans app/tests/cases/transporteur.test.php

4.7.8.1 Initialiser le composant

Puisque CakePHP déconseille d'importer les modèles directement dans les composants, nous avons besoin d'un contrôleur pour accéder aux données dans le modèle.

Si la fonction startup() du composant ressemble à ceci :

public function startup(&$controller){ 
          $this->Transporteur = $controller->Transporteur;  
 }
  1. public function startup(&$controller){
  2. $this->Transporteur = $controller->Transporteur;
  3. }

alors nous pouvons simplement définir une fausse classe vraiment toute simple :

class FauxTransporteurController {} 
  1. class FauxTransporteurController {}

et lui assigner des valeurs comme çà :

$this->TransporteurComponentTest = new TransporteurComponent(); 
$controller = new FauxTransporteurController(); 
$controller->Transporteur = new TransporteurTest(); 
$this->TransporteurComponentTest->startup(&$controller); 
  1. $this->TransporteurComponentTest = new TransporteurComponent();
  2. $controller = new FauxTransporteurController();
  3. $controller->Transporteur = new TransporteurTest();
  4. $this->TransporteurComponentTest->startup(&$controller);

4.7.8.2 Créer une méthode de test

Créez simplement une classe qui étende CakeTestCase et commencez à écrire des tests !

class TransporteurTestCase extends CakeTestCase {
    var $fixtures = array('transporteur');  
    function testGetTransporteur() { 
          $this->TransporteurComponentTest = new TransporteurComponent(); 
          $controller = new FauxTransporteurController(); 
          $controller->Transporteur = new TransporteurTest(); 
          $this->TransporteurComponentTest->startup(&$controller); 
   
          $resultat = $this->TransporteurComponentTest->getTransporteur("12345", "Suéde", "54321", "Suède"); 
          $this->assertEqual($resultat, 1, "SP est meilleur pour 1xxxx-5xxxx"); 
           
          $resultat = $this->TransporteurComponentTest->getTransporteur("41234", "Suéde", "44321", "Suède"); 
          $this->assertEqual($resultat, 2, "WSTS est meilleur pour 41xxx-44xxx"); 
   
          $resultat = $this->TransporteurComponentTest->getTransporteur("41001", "Suéde", "41870", "Suède"); 
          $this->assertEqual($resultat, 3, "GL est meilleur pour 410xx-419xx"); 
   
          $resultat = $this->TransporteurComponentTest->getTransporteur("12345", "Suéde", "54321", "Norvège"); 
          $this->assertEqual($resultat, 0, "Aucun ne peut desservir la Norvège");         
   }
}
 
  1. class TransporteurTestCase extends CakeTestCase {
  2. var $fixtures = array('transporteur');
  3. function testGetTransporteur() {
  4. $this->TransporteurComponentTest = new TransporteurComponent();
  5. $controller = new FauxTransporteurController();
  6. $controller->Transporteur = new TransporteurTest();
  7. $this->TransporteurComponentTest->startup(&$controller);
  8. $resultat = $this->TransporteurComponentTest->getTransporteur("12345", "Suéde", "54321", "Suède");
  9. $this->assertEqual($resultat, 1, "SP est meilleur pour 1xxxx-5xxxx");
  10. $resultat = $this->TransporteurComponentTest->getTransporteur("41234", "Suéde", "44321", "Suède");
  11. $this->assertEqual($resultat, 2, "WSTS est meilleur pour 41xxx-44xxx");
  12. $resultat = $this->TransporteurComponentTest->getTransporteur("41001", "Suéde", "41870", "Suède");
  13. $this->assertEqual($resultat, 3, "GL est meilleur pour 410xx-419xx");
  14. $resultat = $this->TransporteurComponentTest->getTransporteur("12345", "Suéde", "54321", "Norvège");
  15. $this->assertEqual($resultat, 0, "Aucun ne peut desservir la Norvège");
  16. }
  17. }