1
所以我已經得到codeigniter和phpunit播放不錯,但我有點困惑如何實例化控制器。如何在phpunit中實例化Codeigniter3控制器?
我已經發現了一些指南,建議你應該測試控制器,就像這樣:
class Welcome_test extends TestCase
{
public function test_index()
{
$output = $this->request('GET', ['Welcome', 'index']);
$this->assertContains('<title>Welcome to CodeIgniter</title>', $output);
}
}
雖然這在紙面上看起來不錯,一個錯誤告訴我,測試用例沒有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();