An easier way to use PHPUnit with CodeIgniter 3.x.
- You don't have to modify CodeIgniter core files at all.
- You can write controller tests easily.
- Nothing is untestable, maybe.
- Well documented.
- PHP 5.4.0 or later
- CodeIgniter 3.x
- PHPUnit 4.3 or later (4.7 or later is recommended)
- If you use NetBeans 8.0.2, please use 4.7. 4.8 is not compatible yet. You can download old version of
phpunit.phar
from https://phar.phpunit.de/.
- If you use NetBeans 8.0.2, please use 4.7. 4.8 is not compatible yet. You can download old version of
- NetBeans
- Go to Project Properties > Testing > PHPUnit, check Use Custom Test Suite checkbox, and select
application/tests/_ci_phpunit_test/TestSuiteProvider.php
.
- Go to Project Properties > Testing > PHPUnit, check Use Custom Test Suite checkbox, and select
See Change Log.
codeigniter/
├── application/
│ └── tests/
│ ├── _ci_phpunit_test/ ... don't touch! files ci-phpunit-test uses
│ ├── Bootstrap.php ... bootstrap file for PHPUnit
│ ├── TestCase.php ... TestCase class
│ ├── controllers/ ... put your controller tests
│ ├── libraries/ ... put your library tests
│ ├── mocks/
│ │ └── libraries/ ... mock libraries
│ ├── models/ ... put your model tests
│ └── phpunit.xml ... config file for PHPUnit
└── vendor/
Download latest ci-phpunit-test
: https://github.com/kenjis/ci-phpunit-test/releases
Unzip and copy application/tests
folder into your application
folder in CodeIgniter project. That's it.
If you like Composer:
$ cd /path/to/codeigniter/
$ composer require kenjis/ci-phpunit-test --dev
And run install.php
:
$ php vendor/kenjis/ci-phpunit-test/install.php
- Above command always overwrites exisiting files.
- You must run it at CodeIgniter project root folder.
Download latest ci-phpunit-test
: https://github.com/kenjis/ci-phpunit-test/releases
Unzip and replace application/tests/_ci_phpunit_test
folder.
If you like Composer:
$ cd /path/to/codeigniter/
$ composer update kenjis/ci-phpunit-test
$ php vendor/kenjis/ci-phpunit-test/update.php
You have to install PHPUnit before running tests.
Note: You must run phpunit
command in application/tests
folder.
$ cd /path/to/codeigniter/
$ cd application/tests/
$ phpunit
PHPUnit 4.7.7 by Sebastian Bergmann and contributors.
...
Time: 341 ms, Memory: 5.50Mb
OK (3 tests, 3 assertions)
Generating code coverage report in Clover XML format ... done
Generating code coverage report in HTML format ... done
To generate coverage report, Xdebug is needed.
If you want to run a single test case file:
$ phpunit models/Category_model_test.php
As an example, a test case class for Inventory_model
would be as follows:
<?php
class Inventory_model_test extends TestCase
{
public function setUp()
{
$this->resetInstance();
$this->CI->load->model('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);
}
}
As an example, a test case class for Welcome controller would be as follows:
<?php
class Welcome_test extends TestCase
{
public function test_index()
{
$output = $this->request('GET', 'welcome/index');
$this->assertContains(
'<title>Welcome to CodeIgniter</title>', $output
);
}
}
See How to Write Tests for details.