В Интернете находится огромное множество информации о том, как настроить окружение для выполнения модульных тестов с использованием Yii Framework и PhpStorm IDE.
Однако, не смотря на это, не всегда получается запустить тестирование с первого раза. Встречаются различные подводные камни, которые могут застопорить этот процесс.
Поэтому хочу поделиться с теми, кому интересна эта тема, своим опытом настройки PHPUnit в связке с PhphStorm 7.1 - Yii Framework - Openserver.
Следующая информация вряд ли окажется полезной для пользователей Netbeans IDE, а вот приверженцам «шторма», надеюсь, поможет сэкономить время при первоначальной настройке среды для создания и запуска unit-тестов.
Всю настройку я бы разделил не четыре этапа:
- Настройка Openserver
- Настройка PHPUnit
- Настройка PhpStorm
- Настройка Yii
1-й этап: Настройка Openserver
Предполагается, что Openserver у вас уже установлен и настроен. Т.е. на нем уже «крутятся» какие-то из ваших проектов. Установка и настройка этого инструмента выходит за рамки обсуждаемой темы, поэтому эти моменты я умышленно опускаю.
Первый этап самый простой, нам всего лишь нужно создать закладку на PhpStorm в Openserver. Делается это следующим образом:
1. Выбираем в меню Openserver пункт "Настройки"
2. Переходим на вкладку "Закладки"
3. Заполняем поля "Имя", "Категория" и "Выполнить". Первые два поля можете «обозвать», как вам заблагорассудится, а вот в поле "Выполнить" нужно указать путь к исполняемому файлу «шторма».
4. Смело нажимаем кнопку "Добавить", после чего Openserver должен будет перезагрузиться, а мы... перейти ко второму этапу.
2-й этап: Настройка PHPUnit
Для начала, конечно же, необходимо загрузить библиотеку PHPUnit. На официальном сайте на момент написания этого руководства доступны две стабильные версии: 4.2 (совсем свежая, стабильна с августа 2014) и так называемая версия LTS (long term support) 3.7.
И вот тут я сразу хочу предупредить, что PHPStorm 7.1 НЕ поддерживает версии PHPUnit > 3.7. Я этого не знал, поэтому сначала загрузил версию 4.2 и меня ожидал «приятный» сюрприз. Данная проблема обсуждается здесь. Говорят, что этот баг решен в PhpStorm 8 EAP, однако, подтвердить не могу, так как не доводилось использовать эту версию.
Официальная документация PHPUnit предлагает на выбор несколько вариантов установки этой библиотеки:
- С помощью Composer
- Путем обыкновенной загрузки phar архива
- Используя PEAR.
Я выбрал второй вариант, просто скачал phar-архив с версией 3.7 по ссылке на официальном сайте и сохранил этот файл в папке vendor, которая находится в корне директории с проектом.
Всё, теперь можно смело переходить к этапу настройки PHPStorm.
3-й этап: Настройка PhpStorm
Помните, на первом этапе мы создали закладку в Openserver? Теперь, если PhpStorm у вас находится в боевом состоянии, завершите его работу. А сейчас запустите заново, но уже не кликая по ярлыку программы на рабочем столе (или где он у вас там..), а используя меню Openserver: Мои закладки -> PhpStorm (или то название, которое вы придумали в самом начале перед добавлением новой закладки).
После того как «шторм» запустился, идем настраивать (Ctrl + Alt + S), если еще не настроен PHP-интерпретатор:
1. File -> Settings -> [Project Settings] -> PHP Теперь кликаем по кнопке с «...» напротив поля Interpreter. В открывшимся окне Interpreters, нажимаем на "+", и добавляем новый интерпретатор. Называем его PHP, а в секции General, в поле PHP home указываем путь до директории Openserver с нужной версией PHP ([openserver]\modules\php\PHP-5.*****) см. скриншот. После этого сохраняем настройки.
2. File -> Settings -> [Project Settings] -> PHP -> подменю [PHPUnit]. В секции PHPUnit library указываем: Path to phpunit.phar (Это путь к phar файлу с архивом PHPUnit, который мы скачали на втором этапе).
Теперь осталось настроить Yii.
4-й этап: Настройка Yii
В корне проекта создаем директорию "tests", в ней создаем поддиректорию unit. Более подробно о структуре проекта, который использует модульное тестирование можно прочитать в документации Yii. В директории unit мы будем хранить классы модульных тестов.
Теперь в корне директории tests нам необходимо создать еще два файла - bootstrap.php и phpunit.xml. Пример их содержимого представлен ниже.
bootstrap.php:
Код: Выделить всё
<?php
//Путь к файлу yiit.php
$yiit = dirname(__FILE__).'/../../framework/yiit.php';
//Путь к файлу конфигурации приложения, который будет использован при тестировании
$config = dirname(__FILE__).'/../config/test.php';
//Класс, который будет использован вместо CTestCase
require_once('TestCase.php');
//Класс, который будет использован вместо CDbTestCase
require_once('DbTestCase.php');
require_once($yiit);
Yii::createWebApplication($config);
Код: Выделить всё
<phpunit bootstrap="bootstrap.php"
colors="true"
convertErrorsToExceptions="true"
convertNoticesToExceptions="true"
convertWarningsToExceptions="true"
stopOnFailure="false">
</phpunit>
Для того, чтобы избежать ошибок, которые вызывают выражения require_once в классе CTestCase, создадим в корне директории tests свой абстрактный класс TestCase, со следующим содержимым:
Код: Выделить всё
<?php
abstract class TestCase extends PHPUnit_Framework_TestCase
{
}
Теперь осталось лишь создать конфигурацию тестирования в PHPStorm (create run configuration from context).
Для того, чтобы создать конфигурацию тестирования выберите директорию tests и вызовите контекстное меню (клик правой кнопкой мыши на папке), затем выберите пункт "Create tests". В открывшемся окне для Test Scope выберите "Directory", а в поле Directory укажите путь к папке "tests/unit".
Не забудьте добавить в поле Test Runner Options следующие параметры запуска:
--bootstrap Z:\ВАШ ПУТЬ\tests\bootstrap.php --configuration Z:\ВАШ ПУТЬ\tests\phpunit.xml
Сохраните конфигурацию.
Теперь можно и к тестированию приступить. Не забудьте, что для тестирования Active Record класс теста должен расширять класс DbTestCase.php (который мы используем вместо CDbTestCase), тоже самое в случае тестирования обыкновенной модели - класс теста расширяет класс TestCase, а не CTestCase.
Удачного всем тестирования! )