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();