После прочтения книги Agile Web Application Development with Yii 1.1 and PHP5 захотелось рассказать о настройке NetBeans для работы с yii, включая поддержку unit-тестов + тесты через selenium.
Selenium позволяет проводить тесты, почти полностью эмулируя действия через браузер: кликать по ссылкам, вводить текст.
Это очень мощно! Имеются: – Сервер (ip: 192.168.0.3) Debian или другой linux-сервер с настроенным nginx, php5-fpm, xdebug – Компьютер разработчика (ip: 192.168.0.2) Ubuntu 10.10 с установленным NetBeans 7.0m2
Сайт будет располагаться в /var/www/yii/www, а yii в /var/www/yii-lib/yii
Действия на сервере Создаём папку, где будет располагаться сайт.
1 2 3 | |
Создаём конфиг для php5-fpm. Файл: /etc/php5/fpm/pool.d/yii.conf
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | |
Конфигурация сайта для nginx. Файл: /etc/nginx/sites-available/yii
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | |
Включаем сайт, путём линкования в папку sites-enabled.
Скачивание yii
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | |
Устанавливаем php5-xdebug
1
| |
Настраиваем xdebug для работы отладки /etc/php5/fpm/conf.d/xdebug.ini
1 2 3 4 5 6 7 8 9 10 11 | |
Рестартим fpm и apache:
1 2 | |
Настройка компьютера разработчика Я монтирую всю папку /var/www к себе. Это очень удобно, т.к. не нужно скачивать все файлы с сайта. Нужен пакет sshfs.
1 2 3 | |
Прописываем в /etc/hosts
1
| |
Phpunit
Устанавливаем

Selenium
Скачиваем Selenium RC. Распаковываем и запускаем:
1
| |
Netbeans
Устанавливаем NetBeans (в моём случае это NetBeans 7.0m2). Ставим плагин Selenium Module for PHP (Tools → Plugins → Available Plugins).
Немного настраиваем (Tools → Options):
Php → General Ставим порт 9009 для xdebug и снимаем галку с опции Stop at First Line.

Php → Unit Testing Указываем путь до phpunit: /usr/bin/phpunit

Miscellaneous → Files Исключаем файл yiilite.php, чтобы при автокомплите подсказки не дублировались ^(yiilite.php|CVS|

Создаём новый проект:

Указываем пути, название проект. Meta-файлы сохраняем в другой директории.

Указываем url проекта: http://yii.local/

Теперь вызываем настройки проекта.
Указываем директорию тестов (File → Project properties → Sources → Test Folder)

Задаём маппинг пути (File → Project properties → Run configuration → Advanced). Тут не видно, но указано, что /var/www доступно в /mnt/www.

Указываем директорию с yii: /mnt/www/yii-lib/yii (File → Project properties → PHP Include Path)

Папки, которые будут игнорироваться: /mnt/www/yii/www/protected/runtime (File → Project properties → Ignored Folders → Add Folder).

Настройка phpunit (File → Project properties → PhpUnit).

Открываем файлы index.php, index-test.php, protected/tests/bootstrap.php и заменяем /yii-1.1.4.r2429/ на /yii/
Удалить из protected/tests/phpunit.xml тест под IE
1
| |
Меняем константу TEST_BASE_URL в файле protected/tests/WebTestCase.php:
1
| |
Правим тест protected/tests/functional/SiteTest.php (баг):
Заменяем $this->clickAndWait(‘link=Logout’); на $this->clickAndWait(‘link=Logout (demo)’);
Теперь можно запустить тест Selenium

Появиться окошко выбора папки с этими тестами, указываем: /mnt/www/yii/www/protected/tests/functional

Будут всплывать окошки с firefox’ом и в конце концов появиться результат:

Phpunit
Можно запускать phpunit тесты прямо с сервера или с рабочего компьютера, но придётся установить php и все используемые библиотеки (php5-pgsql, php5-mysql, etc). Рассмотрим 2-ой вариант. На компьютере разработчика установить phpunit и php5: Для phpunit теста можно установить свои параметры для yii в protected/config/test.php поверх стандартных (например, коннект к базе). Напишем простейший тест для проверки авторизации. Файл protected/tests/unit/AuthTest.php:
1 2 3 4 5 6 7 8 9 10 11 | |
Для выполнения теста в Netbeans нажимаем Alt+F6. При этом выполняться все тесты: и phpunit и selenium.

Можно выбрать AuthTest.php и нажать Shift+F6, тогда тестирование выполниться только из этого файла. Также можно выполнять phpunit тесты прямо с сервера (aptitude install phpunit):
1 2 3 4 5 6 7 8 9 | |
Также можно написать тесты, не использую базу данных, подменив некоторые таблицы fixtures – ассоциативным массивом, имитирующим записи в таблице.
Дебагинг кода Тесты написаны, теперь можно дебажить код. Открываем index.php, на любой строке добавляем breakpoint (Ctrl+F8). Запускаем дебагинг (Ctrl+F5). Теперь можно “пройтись” по коду клавишами F7 (Step Into) и F8 (Step Over). Это очень помогает понять как же работает сам yii, а так же “качественно” дебажить код, видя текущие переменные, watches, Call stack.
Советую всем прочитать книгу Agile Web Application Development with Yii1.1 and PHP5 всем, кто работает с yii. Книга поднимет уровень и в правильном написании кода для yii, и английского языка.