A clean way of integrating PHPUnit 3.5.x with CodeIgniter 2.x
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
CI = &get_instance(); $this->CI->load->database('testing'); }
public function testGetsAllPosts()
{
$this->CI->load->model('post');
$posts = $this->CI->post->getAll();
$this->assertEquals(1, count($posts));
}
}
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!