如何在phpunit中实例化Codeigniter3控制器?



所以我让codeigniter和phpunit玩得很好,但我对如何实例化控制器有点困惑。

我找到了一些指南,建议你应该像这样测试控制器:

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

虽然这在纸面上看起来不错,但一个错误告诉我 TestCase 没有 request(( 方法。

同一指南演示了如何测试模型:

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

这导致我尝试其他方法,我现在在测试对象的公共属性 CI 中有 &实例,以便我可以像这样访问它:

...$this->CI...

我假设该对象的方法将按名称实例化控制器。像这样:

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

有这样的方法吗?当我使用它时,我只是像这样访问类吗?

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

我最终重新开始我的phpunit集成。这次我使用了kenjis ci-phpunit-test。问题中的示例现在可以正常工作。

最新更新