如何在phpunit中实例化Code​​igniter3控制器?

时间:2017-08-11 16:54:11

标签: php phpunit codeigniter-3

所以我得到了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中有&amp; instance,这样我就可以这样访问它了:

...$this->CI...

我假设该对象的方法将按名称实例化控制器。类似的东西:

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

这种方法存在吗?当我使用它时,我是否只是这样访问该类?

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

1 个答案:

答案 0 :(得分:0)

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