Now a days, my default choice of framework is always Zend Framework. However, I have to maintain a couple live projects in CodeIgniter from early days. I feel its very important to have tests around critical applications, so I have attempted a couple times to integrate PHPUnit with CodeIgniter but failed every time – well, until now.
I’ve managed it this time with hooks. It provides a clean way of bootstrapping the framework and then performing tests on the Model layer – for me testing the model layer has been sufficient. The use is very simple as it does not require any change in how a regular CodeIgniter application is built.
Grab the code from github.
Example – /tests/PostTest.php
class PostTest extends PHPUnit_Framework_TestCase
public function setUp()
$this->CI = &get_instance();
public function testGetsAllPosts()
$posts = $this->CI->post->getAll();
How it works
- The provided PHPUnit bootstrap file sets the CI environment as testing and then loads the framework normally – the code is taken directly from the index.php file.
- A display_override hook checks if the environment is set to testing or not and when it is, it refrains from outputting the rendered view file
- The PHPUnit test case file now can get a reference of the CI object using the commonly used &get_instance() method and can load models and other libraries as needed.
- It is good to have separate database configuration for testing and it might be useful to load the test database with fresh data every time test runs – it can be easily added in the setUp method using the Database Forge classes
Let me know what you think!