Codeigniter:如何在构造函数中测试获取Controller实例的库?

时间:2017-12-08 08:29:13

标签: php codeigniter unit-testing testing phpunit

我有以下名为Item_service的库:

class Item_Service {
private $items;

function __construct(Items $items)
{
    $this->items = $items;
}

其中Itemscontrollers/Items.php的实例。 在我的名为Items_test.php的测试类中,我尝试使用以下行加载Item_service库:

$items = $this->CI->load->library('items/Item_service');

然后我得到错误说

TypeError: Argument 1 passed to Item_Service::__construct() must be an instance of Items, null given

我的测试类是基于kenjis/ci-phpunit-test编写的。

如何将控制器注入此库以便能够测试库?另外,我可以测试控制器本身吗?控制器内部有很多辅助方法。

1 个答案:

答案 0 :(得分:0)

答案是将其作为库调用的第二个参数传递到数组中。例如:

library('items/Item_service',array('controller'=>$this->CI));

然后从您的服务构造中不引用项目 - 它将是一个数组,但您的项目将在“控制器”键上可用。

$this->items = $items['controller'];