Предупреждение
Настоятельно рекомендуется выполнить обновление до CodeIgniter4.
Более простой способ использования PHPUnit с CodeIgniter 3.x.
Вам вообще не нужно изменять основные файлы CodeIgniter.
Вы можете легко писать тесты контроллера.
Возможно, нет ничего непроверяемого.
Хорошо документировано.
PHP 7.3 или новее
Если вы используете Monkey Patching, вы должны использовать PHP-Parser 4.2 или новее в качестве зависимости Composer.
КодИгнитер 3.x
Если вы хотите перейти на CodeIgniter4, см. #361.
PHPUnit 9.3 или новее
Если вы хотите использовать PHPUnit 9.2 или более ранней версии, используйте ci-phpunit-test 2.x.
NetBeans
Перейдите в «Свойства проекта» > «Тестирование» > PHPUnit , установите флажок «Использовать специальный набор тестов» и выберите application/tests/_ci_phpunit_test/TestSuiteProvider.php
.
См. журнал изменений.
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/
Загрузите последнюю версию ci-phpunit-test
с https://github.com/kenjis/ci-phpunit-test/releases.
Разархивируйте и скопируйте папку application/tests
в папку вашего application
в проекте CodeIgniter.
Вот и все.
$ cd /path/to/codeigniter/$ композитор требует kenjis/ci-phpunit-test:^3.0 --dev
И запустите install.php
:
$ phpvendor/kenjis/ci-phpunit-test/install.php --from-composer
Приведенная выше команда всегда перезаписывает существующие файлы.
Вы должны запустить его в корневой папке проекта CodeIgniter.
Вы можете указать свое application
и public
папку с помощью аргументов опций, если вы используете собственные пути к папкам.
$ phpvendor/kenjis/ci-phpunit-test/install.php -a <каталог_приложения> -p <public_dir> -t <unittest_dir>
Таким образом, по умолчанию будет:
$ phpvendor/kenjis/ci-phpunit-test/install.php -a application -p public -t application/tests
Но некоторые пути могут быть неверными, в этом случае исправьте их в файлеtests/Bootstrap.php.
Загрузите последнюю версию ci-phpunit-test
с https://github.com/kenjis/ci-phpunit-test/releases.
Разархивируйте и замените папку application/tests/_ci_phpunit_test
.
Прочтите журнал изменений.
$ cd /path/to/codeigniter/$ обновление композитора kenjis/ci-phpunit-test
Прочтите журнал изменений.
Если вы обновляете предыдущую версию ci-phpunit-test
, в которой был создан каталог application/test/_ci_phpunit_test
, и теперь хотите напрямую использовать ci-phpunit-test
из Composer, вам нужно выполнить пару дополнительных шагов:
Удалите старый каталог тестовой библиотеки:
$ rm -rf /путь/к/codeigniter/application/tests/_ci_phpunit_test
Отредактируйте файл application/tests/Bootstrap.php
. В нижней части раздела «Установить константы основного пути» добавьте следующее:
define('CI_PHPUNIT_TESTPATH', implode(DIRECTORY_SEPARATOR, [имя каталога (APPPATH), «поставщик», «kenjis», «ci-phpunit-test», «приложение», «тесты», «_ci_phpunit_test»] ).DIRECTORY_SEPARATOR);
И замените все ссылки на __DIR__ . '/_ci_phpunit_test/
или TESTPATH . '_ci_phpunit_test
с CI_PHPUNIT_TESTPATH . '
. (Так, например, __DIR__ . '/_ci_phpunit_test/CIPHPUnitTest.php'
станет CI_PHPUNIT_TESTPATH . '/CIPHPUnitTest.php'
.)
Вам необходимо установить PHPUnit перед запуском тестов.
Если вы используете Composer:
$ композитору требуется phpunit/phpunit --dev
$ cd /path/to/codeigniter/$vendor/bin/phpunit -c application/tests/PHPUnit 9.5.4 от Себастьяна Бергманна и участников.... 3 / 3 (100%) Время: 00:00.102, Память: 12.00 MBOK (3 теста, 3 утверждения)Создание отчета о покрытии кода в формате Clover XML... готово [00:00.002]Создание отчета о покрытии кода в формате HTML... выполнено [00:00.012]
Для создания отчета о покрытии необходим Xdebug.
Если вы хотите запустить один файл тестового примера:
$vendor/bin/phpunit -c application/tests/application/tests/models/Category_model_test.php
Например, класс тестового примера для Inventory_model
будет следующим:
<?phpclass Inventory_model_test расширяет TestCase {публичная функция setUp(): void{$this->resetInstance();$this->CI->load->model('Inventory_model');$this->obj = $this->CI->Inventory_model; } Публичная функция test_get_category_list() {$expected = [1 => 'Книга',2 => 'CD',3 => 'DVD', ];$list = $this->obj->get_category_list();foreach ($list as $category) {$this->assertEquals($expected[$category->id], $category->name); } } Публичная функция test_get_category_name() {$actual = $this->obj->get_category_name(1);$expected = 'Книга';$this->assertEquals($expected, $actual); } }
В качестве примера класс тестового примера для контроллера Welcome будет выглядеть следующим образом:
<?phpclass Welcome_test расширяет TestCase {публичная функция test_index() {$output = $this->request('GET', 'welcome/index');$this->assertStringContainsString('<title>Добро пожаловать в CodeIgniter</title>', $output); } }
Подробности см. в разделе «Как писать тесты».
См. Справочник по функциям и классам.
См. Советы.
Некоторые функции ci-phpunit-test доступны в следующих автономных пакетах.
https://github.com/kenjis/phpunit-helper
https://github.com/kenjis/monkey-patch
Тестовое приложение CodeIgniter для ci-phpunit-test
Установщик CodeIgniter Composer
Cli для CodeIgniter 3.0
CodeIgniter Простая и безопасная ветка
Доктрина CodeIgniter
Развертыватель CodeIgniter
CodeIgniter3 Проверка имени файла
Пример виджета CodeIgniter (просмотреть частично)
Контроллер пространства имен CodeIgniter3