в Apple

PHP-Unit под Mac OS X 10.6 (Snow Leopard)

Сегодня решил поиграться с Unit-тестированием профессионального уровня — а значит нужно было поставить PHPUnit.
Привычно открываю консоль макоси (пока довольствуюсь хакинтошем с чистой MacOs X версии 10.6.4, аналог iMac8,1) и вбиваю команду

  1. iMac-Sergej-Beresnev:Unit rassol$ sudo pecl install PhpUnit
  2. No releases available for package "pecl.php.net/PhpUnit"
  3. install failed

Печально. Но не беда.

Эта страшная ошибка («No releases available for package «pecl.php.net/PhpUnit»») говорит лишь о том, что в текущей конфигурации PECL (PEAR) не знает про расширение PhpUnit.
Это легко поправимо.

Добавление канала phpunit в PEAR-Installer

  1. Mac-Sergej-Beresnev:Unit rassol$ sudo pear channel-discover pear.phpunit.de
  2. Adding Channel "pear.phpunit.de" succeeded
  3. Discovery of channel "pear.phpunit.de" succeeded
  4. iMac-Sergej-Beresnev:Unit rassol$ sudo pear config-set preferred_state alpha
  5. config-set succeeded

Теперь я последовательно добавил в Pecl канал и задал предпочтительный тип релиза («alpha»).
Теперь инсталляция должна нормально… Вот именно, что «должна».

  1. iMac-Sergej-Beresnev:Unit rassol$ sudo pear install phpunit/PHPUnit
  2. Unknown remote channel: pear.symfony-project.com
  3. Unknown remote channel: pear.symfony-project.com
  4. Unknown remote channel: components.ez.no
  5. Unknown remote channel: components.ez.no
  6. phpunit/PHPUnit requires PEAR Installer (version >= 1.9.1), installed version is 1.8.0
  7. phpunit/PHPUnit requires package "channel://pear.symfony-project.com/YAML" (version >= 1.0.2)
  8. phpunit/PHPUnit can optionally use PHP extension "dbus"
  9. phpunit/DbUnit requires PEAR Installer (version >= 1.9.1), installed version is 1.8.0
  10. phpunit/DbUnit requires package "channel://pear.symfony-project.com/YAML" (version >= 1.0.2)
  11. phpunit/File_Iterator requires PEAR Installer (version >= 1.9.1), installed version is 1.8.0
  12. phpunit/Text_Template requires PEAR Installer (version >= 1.8.1), installed version is 1.8.0
  13. phpunit/PHP_CodeCoverage requires PEAR Installer (version >= 1.9.1), installed version is 1.8.0
  14. phpunit/PHP_CodeCoverage requires package "channel://components.ez.no/ConsoleTools" (version >= 1.6)
  15. phpunit/PHP_CodeCoverage requires package "phpunit/File_Iterator" (version >= 1.2.2)
  16. phpunit/PHP_CodeCoverage requires package "phpunit/Text_Template" (version >= 1.0.0)
  17. phpunit/PHP_CodeCoverage can optionally use PHP extension "xdebug" (version >= 2.0.5)
  18. phpunit/PHP_Timer requires PEAR Installer (version >= 1.9.0), installed version is 1.8.0
  19. phpunit/PHPUnit_MockObject requires PEAR Installer (version >= 1.9.1), installed version is 1.8.0
  20. phpunit/PHPUnit_MockObject requires package "phpunit/Text_Template" (version >= 1.0.0)
  21. phpunit/PHPUnit_Selenium requires PEAR Installer (version >= 1.9.1), installed version is 1.8.0
  22. phpunit/PHP_TokenStream requires PEAR Installer (version >= 1.9.1), installed version is 1.8.0
  23. phpunit/PHP_TokenStream requires package "channel://components.ez.no/ConsoleTools" (version >= 1.6)
  24. No valid packages found
  25. install failed

Таким вот ктулхомерзким образом мне тыкнули в неактуальность PEAR-Installer.
Ну что же. На полпути не останавливаются.

Обновление (переустановка) PEAR-Installer

Не буду долго расписывать хождения по мукам, приведу лишь последовательность команд.
Первым делом запускаем инсталлер.

  1. curl http://pear.php.net/go-pear | sudo php
  2. Go-pear will install the ‘pear’ command and all the files needed by
  3. it.  This command is your tool for PEAR installation and maintenance.
  4.  
  5. Go-pear also lets you download and install the following optional PEAR
  6. packages: PEAR_Frontend_Web-beta, PEAR_Frontend_Gtk2, MDB2.
  7. If you wish to abort, press Control-C now, or press Enter to continue:
  8.  

Конечно, жмём «Enter».
На вопрос о прокси отвечаем по обстоятельствам. Если такового нет — жмём опять «ввод».
Если есть — указываем в формате http://user:password@proxy.myhost.com:port

Далее наиболее важным является вопрос про пути.

  1. Below is a suggested file layout for your new PEAR installation.  To
  2. change individual locations, type the number in front of the
  3. directory.  Type ‘all’ to change all of them or simply press Enter to
  4. accept these locations.
  5.  
  6.  1. Installation prefix ($prefix) : .
  7.  2. Temporary files directory     : $prefix/temp
  8.  3. Binaries directory            : $prefix/bin
  9.  4. PHP code directory ($php_dir) : $prefix/PEAR
  10.  5. Documentation base directory  : $php_dir/docs
  11.  6. Data base directory           : $php_dir/data
  12.  7. Tests base directory          : $php_dir/tests

Тут надо ввести «1» и указать путь «/usr». Это очень принципиальный момент.
Далее установка пройдёт в штатном режиме, выдаст много буков в консоль, а также, при установленном php 5.3 будет кидаться вот такими перлами:

  1. Deprecated: Function set_magic_quotes_runtime() is deprecated in /usr/temp/PEAR/Registry.php on line 1140

Не обращайте внимания, это вполне нормально.
В какой-то момент установщик спросит о путях. Ему надо ответить утвердительно — иначе PEAR не будет доступен в include_path. Что будет эпическим fail’ом, т.к. 99% PEAR-библиотек и не меньшее кол-во расширений эти пути активно использует.

  1. WARNING!  The include_path defined in the currently used php.ini does not
  2. contain the PEAR PHP directory you just specified:
  3. </usr/PEAR>
  4. If the specified directory is also not in the include_path used by
  5. your scripts, you will have problems getting any PEAR packages working.
  6.  
  7.  
  8. Would you like to alter php.ini </private/etc/php.ini>? [Y/n] : y

Поздравляю! Ваш PEAR-Installer готов к употреблению по адресу «/usr/bin/pear» (у меня также работает команда pecl).

Обновление PEAR-Installer, альтернативный способ

Предложен Андреем Д. [habra-profile]

«Pear-installer» — это как раз пакет PEAR/PEAR, который сам себя таки обновляет. В любом случае стоило попробовать обычный upgrade-all.

  1. iMac-Sergej-Beresnev:~ rassol$ sudo pecl upgrade PEAR/PEAR

Собственно установка PHPUnit

Все преграды позади и я ставлю таки phpUnit.
Для этого надо опять задать канал и версию, а затем установить расширение стандартной командой install

  1. iMac-Sergej-Beresnev:Temp rassol$ sudo pear channel-discover pear.phpunit.de
  2. Adding Channel "pear.phpunit.de" succeeded
  3. Discovery of channel "pear.phpunit.de" succeeded
  4. iMac-Sergej-Beresnev:Temp rassol$ sudo pear config-set preferred_state alpha
  5. config-set succeeded
  6. iMac-Sergej-Beresnev:Temp rassol$ sudo pear install phpunit/PHPUnit
  7. Unknown remote channel: pear.symfony-project.com
  8. Unknown remote channel: pear.symfony-project.com
  9. Unknown remote channel: components.ez.no
  10. Unknown remote channel: components.ez.no
  11. phpunit/PHPUnit requires package "channel://pear.symfony-project.com/YAML" (version >= 1.0.2)
  12. phpunit/PHPUnit can optionally use PHP extension "dbus"
  13. phpunit/DbUnit requires package "channel://pear.symfony-project.com/YAML" (version >= 1.0.2)
  14. phpunit/PHP_CodeCoverage requires package "channel://components.ez.no/ConsoleTools" (version >= 1.6)
  15. phpunit/PHP_CodeCoverage can optionally use PHP extension "xdebug" (version >= 2.0.5)
  16. phpunit/PHP_TokenStream requires package "channel://components.ez.no/ConsoleTools" (version >= 1.6)
  17. downloading File_Iterator-1.2.3.tgz …
  18. Starting to download File_Iterator-1.2.3.tgz (3,406 bytes)
  19. ….done: 3,406 bytes
  20. downloading Text_Template-1.0.0.tgz …
  21. Starting to download Text_Template-1.0.0.tgz (2,493 bytes)
  22. done: 2,493 bytes
  23. downloading PHP_Timer-1.0.0.tgz …
  24. Starting to download PHP_Timer-1.0.0.tgz (2,536 bytes)
  25. done: 2,536 bytes
  26. downloading PHPUnit_MockObject-1.0.0RC2.tgz …
  27. Starting to download PHPUnit_MockObject-1.0.0RC2.tgz (17,291 bytes)
  28. done: 17,291 bytes
  29. downloading PHPUnit_Selenium-1.0.0RC2.tgz …
  30. Starting to download PHPUnit_Selenium-1.0.0RC2.tgz (15,256 bytes)
  31. done: 15,256 bytes
  32. install ok: channel://pear.phpunit.de/File_Iterator-1.2.3
  33. install ok: channel://pear.phpunit.de/Text_Template-1.0.0
  34. install ok: channel://pear.phpunit.de/PHP_Timer-1.0.0
  35. install ok: channel://pear.phpunit.de/PHPUnit_Selenium-1.0.0RC2
  36. install ok: channel://pear.phpunit.de/PHPUnit_MockObject-1.0.0RC2
  37.  

Вот собственно и весь процесс.