Tôi có một ứng dụng web PHP được xây dựng với khuôn khổ CodeIgniter MVC. Tôi muốn kiểm tra các lớp điều khiển khác nhau. Tôi đang sử dụng Toast để kiểm tra đơn vị. Bộ điều khiển của tôi không có trạng thái, mọi thứ mà chúng xử lý đều được lưu vào phiên hoặc được chuyển tới để hiển thị. Tạo một đối tượng phiên giả lập và kiểm tra xem nó có hoạt động đúng hay không đơn giản (chỉ cần tạo một đối tượng giả và tiêm nó với $ controller-> session = $ mock).Làm cách nào để kiểm tra bộ điều khiển bằng CodeIgniter?
Điều tôi không biết, là cách làm việc với chế độ xem. Trong CodeIgniter, lượt xem được tải dưới dạng:
$this->load->view($view_name, $vars, $return);
Vì tôi không muốn thay đổi mã CI, mặc dù tôi có thể tạo bộ nạp giả và thay thế bản gốc. Và đây là vấn đề, tôi không thể tìm ra cách để lấy được một lớp mới từ CI_Loader.
Nếu tôi không bao gồm các hệ thống/thư viện/Loader.php tập tin, các CI_Loader lớp là undefined và tôi không thể kế thừa từ nó:
class Loader_mock extends CI_Loader
Nếu tôi làm bao gồm các tập tin (sử dụng require_once), tôi nhận được lỗi:
Cannot redeclare class CI_Loader
Trông như mã CI tự nó không sử dụng require_once từ bất cứ lý do gì.
Có ai ở đây có kinh nghiệm với đơn vị kiểm tra các ứng dụng được hỗ trợ CodeIgniter không?
Edit: Tôi cố gắng để tiêm một đối tượng loader thực tại thời gian chạy vào một lớp học giả, và chuyển hướng tất cả các cuộc gọi và các biến với __call, __set, __get, __isset và __unset. Nhưng, nó dường như không hoạt động (tôi không nhận được bất kỳ lỗi mặc dù, chỉ cần không có đầu ra, tức là trang trống từ bánh mì nướng). Đây là mã:
class Loader_mock
{
public $real_loader;
public $varijable = array();
public function Loader_mock($real)
{
$this->real_loader = $real;
}
public function __call($name, $arguments)
{
return $this->real_loader->$name($arguments);
}
public function __set($name, $value)
{
return $this->real_loader->$name = $value;
}
public function __isset($name)
{
return isset($this->real_loader->$name);
}
public function __unset($name)
{
unset($this->loader->$name);
}
public function __get($name)
{
return $this->real_loader->$name;
}
public function view($view, $vars = array(), $return = FALSE)
{
$varijable = $vars;
}
}
Ý tưởng hay, cảm ơn. –