Welcome to the Cookbook

loading...

4.7.8 Testing components

There is no translation yet for this section. Please help out and translate this.. More information about translations

Lets assume that we want to test a component called TransporterComponent, which uses a model called Transporter to provide functionality for other controllers. We will use four files:

  • A component called Transporters found in app/controllers/components/transporter.php
  • A model called Transporter found in app/models/transporter.php
  • A fixture called TransporterTestFixture found in app/tests/fixtures/transporter_fixture.php
  • The testing code found in app/tests/cases/transporter.test.php

4.7.8.1 Initializing the component

There is no translation yet for this section. Please help out and translate this.. More information about translations

Since CakePHP discourages from importing models directly into components we need a controller to access the data in the model.

If the startup() function of the component looks like this:

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

then we can just design a really simple fake class:

class FakeTransporterController {} 
  1. class FakeTransporterController {}

and assign values into it like this:

$this->TransporterComponentTest = new TransporterComponent(); 
$controller = new FakeTransporterController(); 
$controller->Transporter = new TransporterTest(); 
$this->TransporterComponentTest->startup(&$controller); 
  1. $this->TransporterComponentTest = new TransporterComponent();
  2. $controller = new FakeTransporterController();
  3. $controller->Transporter = new TransporterTest();
  4. $this->TransporterComponentTest->startup(&$controller);

4.7.8.2 Creating a test method

There is no translation yet for this section. Please help out and translate this.. More information about translations

Just create a class that extends CakeTestCase and start writing tests!

class TransporterTestCase extends CakeTestCase {
    var $fixtures = array('transporter');  
    function testGetTransporter() { 
          $this->TransporterComponentTest = new TransporterComponent(); 
          $controller = new FakeTransporterController(); 
          $controller->Transporter = new TransporterTest(); 
          $this->TransporterComponentTest->startup(&$controller); 
   
          $result = $this->TransporterComponentTest->getTransporter("12345", "Sweden", "54321", "Sweden"); 
          $this->assertEqual($result, 1, "SP is best for 1xxxx-5xxxx"); 
           
          $result = $this->TransporterComponentTest->getTransporter("41234", "Sweden", "44321", "Sweden"); 
          $this->assertEqual($result, 2, "WSTS is best for 41xxx-44xxx"); 
   
          $result = $this->TransporterComponentTest->getTransporter("41001", "Sweden", "41870", "Sweden"); 
          $this->assertEqual($result, 3, "GL is best for 410xx-419xx"); 
   
          $result = $this->TransporterComponentTest->getTransporter("12345", "Sweden", "54321", "Norway"); 
          $this->assertEqual($result, 0, "Noone can service Norway");         
   }
}
 
  1. class TransporterTestCase extends CakeTestCase {
  2. var $fixtures = array('transporter');
  3. function testGetTransporter() {
  4. $this->TransporterComponentTest = new TransporterComponent();
  5. $controller = new FakeTransporterController();
  6. $controller->Transporter = new TransporterTest();
  7. $this->TransporterComponentTest->startup(&$controller);
  8. $result = $this->TransporterComponentTest->getTransporter("12345", "Sweden", "54321", "Sweden");
  9. $this->assertEqual($result, 1, "SP is best for 1xxxx-5xxxx");
  10. $result = $this->TransporterComponentTest->getTransporter("41234", "Sweden", "44321", "Sweden");
  11. $this->assertEqual($result, 2, "WSTS is best for 41xxx-44xxx");
  12. $result = $this->TransporterComponentTest->getTransporter("41001", "Sweden", "41870", "Sweden");
  13. $this->assertEqual($result, 3, "GL is best for 410xx-419xx");
  14. $result = $this->TransporterComponentTest->getTransporter("12345", "Sweden", "54321", "Norway");
  15. $this->assertEqual($result, 0, "Noone can service Norway");
  16. }
  17. }