2017-08-11 2 views
1

J'ai donc un codeigniter et un phpunit sympa, mais je suis un peu confus quant à la façon d'instancier les contrôleurs.Comment instancier les contrôleurs Codeigniter3 dans phpunit?

J'ai trouvé quelques guides qui suggèrent que vous devez tester les contrôleurs comme ceci:

class Welcome_test extends TestCase 
{ 
    public function test_index() 
    { 
     $output = $this->request('GET', ['Welcome', 'index']); 
     $this->assertContains('<title>Welcome to CodeIgniter</title>', $output); 
    } 
} 

Bien que l'air bien sur le papier, une erreur m'a informé que TestCase n'a pas de méthode demande().

Le même guide montre l'essai d'un modèle comme celui-ci:

class Inventory_model_test extends TestCase 
{ 
    public function setUp() 
    { 
     $this->resetInstance(); 
     $this->CI->load->model('shop/Inventory_model'); 
     $this->obj = $this->CI->Inventory_model; 
    } 

    public function test_get_category_list() 
    { 
     $expected = [ 
      1 => 'Book', 
      2 => 'CD', 
      3 => 'DVD', 
     ]; 
     $list = $this->obj->get_category_list(); 
     foreach ($list as $category) { 
      $this->assertEquals($expected[$category->id], $category->name); 
     } 
    } 

    public function test_get_category_name() 
    { 
     $actual = $this->obj->get_category_name(1); 
     $expected = 'Book'; 
     $this->assertEquals($expected, $actual); 
    } 
} 

Cela m'a amené à essayer quelque chose d'autre, et j'ai maintenant & exemple dans le CI de la propriété publique de l'objet de test afin que je puisse y accéder comme si :

...$this->CI... 

Je suppose qu'une méthode de cet objet va instancier le contrôleur par son nom. Quelque chose comme:

$this->CI->load->controller('ControllerClassName'); 

Une telle méthode existe-t-elle? Quand je l'utilise, dois-je simplement accéder à la classe comme ça?

$this->CI->load->controller('ControllerClassName'); 
$c = new $this->CI->ControllerClassName(); 

Répondre

0

J'ai fini par recommencer avec mon intégration de phpunit. Cette fois-ci, j'ai utilisé kenjis ci-phpunit-test. Les exemples de la question fonctionnent maintenant correctement.