kenjis / ci-phpunit-test
An easier way to use PHPUnit with CodeIgniter 3.x
Installs: 923 653
Dependents: 3
Suggesters: 4
Security: 0
Stars: 587
Watchers: 43
Forks: 195
Open Issues: 16
Requires
- php: >=7.3
- nikic/php-parser: ^4.2
- 3.x-dev
- v3.0.4
- v3.0.3
- v3.0.2
- v3.0.1
- v3.0.0
- 2.x-dev
- v2.0.2
- v2.0.1
- v2.0.0
- dev-master / 1.0.x-dev
- v1.0.2
- v1.0.1
- v1.0.0
- v0.19.0
- v0.18.0
- v0.17.3
- v0.17.2
- v0.17.1
- v0.17.0
- v0.16.1
- v0.16.0
- v0.15.0
- v0.14.0
- v0.13.0
- v0.12.2
- v0.12.1
- v0.12.0
- v0.11.3
- v0.11.2
- v0.11.1
- v0.11.0
- v0.10.1
- v0.10.0
- v0.9.1
- v0.9.0
- v0.8.2
- v0.8.1
- v0.8.0
- v0.7.0
- v0.6.2
- v0.6.1
- v0.6.0
- v0.5.0
- v0.4.0
- v0.3.0
- v0.2.0
- v0.1.1
- v0.1.0
This package is auto-updated.
Last update: 2024-10-16 13:41:52 UTC
README
Warning
Upgrading to CodeIgniter4 is strongly recommended.
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.
Requirements
- PHP 7.3 or later
- If you use Monkey Patching, you must use PHP-Parser 4.2 or later as a Composer dependency.
- CodeIgniter 3.x
- If you want to upgrade to CodeIgniter4, see #361.
- PHPUnit 9.3 or later
- If you want to use PHPUnit 9.2 or earlier, please use ci-phpunit-test 2.x.
Optional
- 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
Change Log
See Change Log.
Folder Structure
codeigniter/
├── application/
│ └── tests/
│ ├── _ci_phpunit_test/ ... don't touch! files ci-phpunit-test uses
│ ├── Bootstrap.php ... bootstrap file for PHPUnit
│ ├── DbTestCase.php ... DbTestCase class
│ ├── 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/
Installation
Manual Installation
- Download latest
ci-phpunit-test
from https://github.com/kenjis/ci-phpunit-test/releases. - Unzip and copy
application/tests
folder into yourapplication
folder in CodeIgniter project.
That's it.
Composer Installation
$ cd /path/to/codeigniter/ $ composer require kenjis/ci-phpunit-test:^3.0 --dev
And run install.php
:
$ php vendor/kenjis/ci-phpunit-test/install.php --from-composer
- The above command always overwrites existing files.
- You must run it at CodeIgniter project root folder.
- You can specify your
application
andpublic
folder with option arguments, if you use custom folder paths.
$ php vendor/kenjis/ci-phpunit-test/install.php -a <application_dir> -p <public_dir> -t <unittest_dir>
So the default would be:
$ php vendor/kenjis/ci-phpunit-test/install.php -a application -p public -t application/tests
- But some paths may be not correct, in that case, please fix them in tests/Bootstrap.php.
Upgrading
Manual Upgrading
- Download latest
ci-phpunit-test
from https://github.com/kenjis/ci-phpunit-test/releases. - Unzip and replace
application/tests/_ci_phpunit_test
folder. - Read Change Log.
Composer Upgrading
$ cd /path/to/codeigniter/ $ composer update kenjis/ci-phpunit-test
Read Change Log.
If you want to remove application/test/_ci_phpunit_test/
If you're upgrading from a previous version of ci-phpunit-test
that created
an application/test/_ci_phpunit_test
directory and now want to directly use
ci-phpunit-test
from Composer, you have a couple of additional steps:
- Delete the old test library directory:
$ rm -rf /path/to/codeigniter/application/tests/_ci_phpunit_test
- Edit the
application/tests/Bootstrap.php
file. At the bottom of the "set the main path constants" section, add the following:define('CI_PHPUNIT_TESTPATH', implode( DIRECTORY_SEPARATOR, [dirname(APPPATH), 'vendor', 'kenjis', 'ci-phpunit-test', 'application', 'tests', '_ci_phpunit_test'] ).DIRECTORY_SEPARATOR);
And replace any references to__DIR__ . '/_ci_phpunit_test/
orTESTPATH . '_ci_phpunit_test
withCI_PHPUNIT_TESTPATH . '
. (So, for example,__DIR__ . '/_ci_phpunit_test/CIPHPUnitTest.php'
would becomeCI_PHPUNIT_TESTPATH . '/CIPHPUnitTest.php'
.)
How to Run Tests
You need to install PHPUnit before running tests.
If you use Composer:
$ composer require phpunit/phpunit --dev
Run All Tests
$ cd /path/to/codeigniter/ $ vendor/bin/phpunit -c application/tests/ PHPUnit 9.5.4 by Sebastian Bergmann and contributors. ... 3 / 3 (100%) Time: 00:00.102, Memory: 12.00 MB OK (3 tests, 3 assertions) Generating code coverage report in Clover XML format ... done [00:00.002] Generating code coverage report in HTML format ... done [00:00.012]
To generate coverage report, Xdebug is needed.
Run a Single Test
If you want to run a single test case file:
$ vendor/bin/phpunit -c application/tests/ application/tests/models/Category_model_test.php
How to Write Tests
As an example, a test case class for Inventory_model
would be as follows:
<?php class Inventory_model_test extends TestCase { public function setUp(): void { $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->assertStringContainsString( '<title>Welcome to CodeIgniter</title>', $output ); } }
See How to Write Tests for details.
Function/Class Reference
See Function and Class Reference.
Tips
See Tips.
Stand-alone Packages
Some features of ci-phpunit-test are available in the following standalone packages.