Soldat's log

Simplemente otro blog personal

PHP, PEAR y PHPUnit para Yii en Mac OS X Lion

con 9 comentarios

He tenido que montar un entorno de desarrollo para Yii, un framework de PHP, en mi Mac OS X Lion. Como he tenido que hacer varios apaños he recopilado todos los ajustes en esta entrada.

Antes de nada enumero las versiones del software utilizadas:

  • Mac OS X 10.7.2
  • PHP 5.3.6
  • PEAR 1.9.4
  • PHPUnit 3.5.15
  • Selenium Server 2.8.0
  • Yii 1.1.8
  • Firefox 7.0.1

La mayoría de las acciones que comento han de realizarse con permisos de administrador.

Activar el servidor web con PHP

Mac OS X Lion incluye Apache con soporte para PHP. Sin embargo es necesario activarlo. Para ello en /etc/apache2/httpd.conf descomentamos:

LoadModule php5_module libexec/apache2/libphp5.so

Y en /etc copiamos el fichero de configuración de fábrica:

# cp /etc/php.ini.default /etc/php.ini

Nota: personalmente prefiero que mis entornos de desarrollo y pruebas sean lo más privados posibles. Por ello modifico el Listen de /etc/apache2/httpd.conf a

Listen 127.0.0.1:80

Solamente resta activar el servidor web desde System Preferences / Sharing / Web Sharing.

El directorio que se publica como página principal está ubicado en /Library/WebServer/Documents/ podemos utilizar directamente esta carpeta o bien utilizar carpetas personales ( http://localhost/~usuario/ ). La opción de carpetas personales busca el directorio Sites en el home del usuario, que se puede crear a partir del cuadro de configuración anterior.

Para probar que todo está funcionando lo más recomendable es publicar un fichero .php con un getinfo():

<?php
phpinfo();
?>

Instalar PEAR y PHPUnit

En las versiones anteriores de Mac OS X PEAR está directamente instalado, en Lion es necesario hacer un paso previo:

# php /usr/lib/php/install-pear-nozlib.phar 

Con esto ya tenemos PEAR instalado. Actualizamos:

# pear upgrade-all

configuramos el autodiscover (para hacernos las cosas más fáciles) e instalamos PHPUnit:

# pear config-set auto_discover 1
# pear install pear.phpunit.de/PHPUnit

Solamente nos falta un detalle más, añadir el software instalado por PEAR a la configuración de PHP. Añadimos al /etc/php.ini:

include_path = "/usr/lib/php/pear/"

Para comprobar que todo va bien comprobamos la versión de PHPUnit

# phpunit --version

Montar y ejecutar las pruebas de un proyecto Yii

A partir de aquí lidiaremos con los problemas que surgen con Yii. Primero nos descargamos Yii y creamos un proyecto de prueba:

$ yii/framework/yiic webapp demo

Problema con date.timezone

Al acceder a la demo puede que nos muestre un mensaje de error como el siguiente:

It is not safe to rely on the system’s timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function.

La solución más sencilla es configurar en /etc/php.ini el timezone, por ejemplo:

date.timezone = "Europe/Madrid"

Problema con Selenium, arrancar Firefox

Configuramos la URL para las pruebas en el fichero protected/tests/WebTestCase.php:

define('TEST_BASE_URL','http://localhost/~chernando/demo/index-test.php/');

Descargamos Selenium y lo dejamos ejecutando:

$ java -jar selenium-server-standalone-2.8.0.jar

e intentamos lanzar las pruebas funcionales del proyecto yii:

$ cd demo/protected/tests/
$ phpunit functional/SiteTest.php

Lo más probable es que falle el lanzamiento de iexplorer (bastante razonable en Mac OS X ;) ) o que no encuentre firefox-bin ya que no está en el path. Para solucionarlos editamos protected/tests/phpunit.xml, eliminamos:

<browser name="Internet Explorer" browser="*iexplore" />

y modificamos la entrada del Firefox a nuestro, en mi caso es el siguiente:

<browser name="Firefox" browser="*firefox /Users/chernando/Applications/Firefox.app/Contents/MacOS/firefox-bin" />

Con esto podremos ejecutar las pruebas funcionales.

Problema con Selenium, fallan los test

Después de llegar hasta aquí me sorprendió bastante que de los tres tests que vienen de fábrica fallaran dos ;) Concretamente estos dos fallos:

Body cannot be blank.
Failed asserting that <boolean:false> is true.

Password cannot be blank.
Failed asserting that <boolean:false> is true.

Por suerte es un problema conocido y ya está corregido en el repositorio.

El problema es que no se espera a que se ejecuten las validaciones con JavaScript. El parche publicado corrige un par de líneas en el fichero protected/tests/functional/SiteTest.php que cambia los dos assert que fallan por waitFor, consiguiendo el comportamiento esperado.

Advertisement

Escrito por chernando

2011/10/16 a 17:22

Escrito en Desarrollo Software, Mac OS X

Etiquetado con , , ,

9 comentarios

Suscríbete a los comentarios mediante RSS.

  1. Genial el artículo, gracias!
    Me va a ser muy útil cuando tenga que montar un entorno de PHP aquí (que será en breves me temo).

    Por simple curiosidad, y aunque se que es salirme bastante por la tangente… ¿Por qué Yii en vez de Simphony o CakePHP, o algo del estilo? Es que es la primera vez que escuchaba el nombre de ese framework y me ha picado la curiosidad… :)

    Saludos!

    Iñaki

    2011/10/16 a 17:47

    • Me alegro de te sirva :) Es una forma bastante limpia de montar un entorno de desarrollo PHP en el Mac OS X sin tener que recurrir a MAMP (para tener MySQL con Homebrew sobra).

      Respecto a Yii frente a otras opciones… buena pregunta. El motivo principal: es el que usan en el curro ;) Y según la Wikipedia es bastante completo http://en.wikipedia.org/wiki/Comparison_of_Web_application_frameworks#PHP_2

      chernando

      2011/10/16 a 18:02

  2. Vaya, ya era hora de ver que alguien usa Yii y habla español! muy interesante el artículo, acabo de descubrir tu blog. Te arego a twitter ^^

    elchux

    2011/11/15 a 22:36

    • Jejeje gracias por la opinión, a ver si tengo la oportunidad de escribir alguna cosa más de Yii.

      chernando

      2011/11/16 a 18:57

  3. Hoy hemos comprado el MACMINI SERVER [LION]
    Sencillamente pretendemos publicar nuestras web creadas con drupal 7.

    Por favor…. solo pido unas pinceladas de tu sabiduria para poder instalar el entorno Drupal y las web que tenemos. PLEASE !!!!

    Alex

    2012/01/11 a 12:30

    • Alex, me temo que no tengo experiencia con la combinación de Drupal y Mac OS X Server.

      Lo único que puedo recomendarte es que revises en /etc/apache/sites/ para configurar el sitio, una vez consigas servir un index.php con phpinfo() pruebes con el resto de requisitos de Drupal (si los tuviera).

      Ánimo.

      chernando

      2012/01/12 a 20:26

  4. Gracias de todas formas por publicar contenidos avanzados difíciles de encontrar en español.
    Un saludo

    Alex

    alex

    2012/01/20 a 13:24

  5. Hola chernando, gracias por el post antes que nada… yo uso mamp (en mac os x) y tengo un problema… a veces el phpunit me funciona y otras no… y no se a qué obedece, escribo phpunit en la linea de comandos y no me da ningún mensaje… nada… sabes a qué puede ser debido?

    David

    2012/02/01 a 13:58

    • Mmmm… quizás haya algún problema entre el phpunit que tienes que instalar en Mac OS X y el que debería estar dentre de MAMP. Un ‘which phpunit’ debería decirte contra cuál estás trabajando.

      chernando

      2012/02/06 a 17:11


Tu opinión cuenta, ¡compártela!

Fill in your details below or click an icon to log in:

Logo de WordPress.com

You are commenting using your WordPress.com account. Log Out / Cambiar )

Twitter picture

You are commenting using your Twitter account. Log Out / Cambiar )

Facebook photo

You are commenting using your Facebook account. Log Out / Cambiar )

Connecting to %s

Seguir

Get every new post delivered to your Inbox.