• CodeIgniter
  • PHP
  • An easier way to use PHPUnit with CodeIgniter 3.x.

    ci-phpunit-test for CodeIgniter 3.x

    Latest Stable Version Total Downloads Latest Unstable Version License

    Scrutinizer Code Quality Coverage Status Build Status



    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.

    Screenshot: Running tests on NetBeans 8.1

    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.

    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

    1. Download latest ci-phpunit-test from https://github.com/kenjis/ci-phpunit-test/releases.
    2. Unzip and copy application/tests folder into your application 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 and public 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

    Upgrading

    Manual Upgrading

    1. Download latest ci-phpunit-test from https://github.com/kenjis/ci-phpunit-test/releases.
    2. Unzip and replace application/tests/_ci_phpunit_test folder.
    3. 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:

    1. Delete the old test library directory:
      $ rm -rf /path/to/codeigniter/application/tests/_ci_phpunit_test
    2. 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/ or TESTPATH . '_ci_phpunit_test with CI_PHPUNIT_TESTPATH . '. (So, for example, __DIR__ . '/_ci_phpunit_test/CIPHPUnitTest.php' would become CI_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.

    Related Projects for CodeIgniter 3.x

    Github: https://github.com/kenjis/ci-phpunit-test

    Để lại một bình luận

    Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

    5 mins