Настройка Yii + PhpStorm 7.1 + PHPUnit 3.7 + Openserver.

Обсуждение документации. Переводы Cookbook и авторские рецепты.
Ответить
Аватара пользователя
iAchilles
Сообщения: 41
Зарегистрирован: 2014.09.11, 19:44

Настройка Yii + PhpStorm 7.1 + PHPUnit 3.7 + Openserver.

Сообщение iAchilles »

Всем привет!
В Интернете находится огромное множество информации о том, как настроить окружение для выполнения модульных тестов с использованием 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.
Хочу заметить, что последний вариант, в принципе уже не поддерживается, и в канун Нового 2015 Года, PEAR-канал pear.phpunit.de будет официально закрыт.
Я выбрал второй вариант, просто скачал 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.xml:

Код: Выделить всё

<phpunit bootstrap="bootstrap.php"
        colors="true"
        convertErrorsToExceptions="true"
        convertNoticesToExceptions="true"
        convertWarningsToExceptions="true"
        stopOnFailure="false">

</phpunit> 
На текущий момент, к сожалению, невозможно воспользоваться классами, который предлагает Yii для unit-тестов, а именно CTestCase и CDbTestCase (последний является потомком CTestCase), если мы используем phar-архив PHPUnit, об этом разработчикам Yii известно. В следующих релизах это будет исправлено, ну а пока, можно прибегнуть к костылям. Я скептически отношусь к советам что-то править и комментировать в файле CTestCase.php. Поскольку этот файл является частью Фреймворка любые поправки и изменения в его код могут вносить только контрибьюторы yii.
Для того, чтобы избежать ошибок, которые вызывают выражения require_once в классе CTestCase, создадим в корне директории tests свой абстрактный класс TestCase, со следующим содержимым:

Код: Выделить всё

<?php

abstract class TestCase extends PHPUnit_Framework_TestCase
{

}
Здесь же создадим класс DbTestCase, который, внимание(!), полностью повторяет функционал класса CDbTestCase, только расширяет класс TestCase, а не CTestCase. Просто скопируйте код из класса CDbTestCase.php в файл DbTestCase.php и укажите, что он расширяет класс 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.

Удачного всем тестирования! )
gnus212
Сообщения: 3
Зарегистрирован: 2013.09.23, 17:13

Re: Настройка Yii + PhpStorm 7.1 + PHPUnit 3.7 + Openserver

Сообщение gnus212 »

Большущее спасибо от новичка!
Ответить