2017-08-11 44 views
1

所以我已經得到codeigniter和phpunit播放不錯,但我有點困惑如何實例化控制器。如何在phpunit中實例化Code​​igniter3控制器?

我已經發現了一些指南,建議你應該測試控制器,就像這樣:

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

回答

相關問題