unit testing - Integrando PHPUnit con CakePHP 1.3
unit-testing cakephp-1.3 (2)
He estado buscando un tutorial para ayudarme a integrar PHPUnit con CakePHP. Buscando usar las pruebas de Selenio también, así que prefiero PHPUnit.
He intentado seguir el tutorial en http://cakebaker.42dh.com/2006/03/22/selenium/ pero parece que no funciona. ¿Algún buen tutorial por ahí?
¡Gracias!
Desafortunadamente, CakePHP no está diseñado para funcionar junto con PHPUnit. CakePHP ha cambiado a SimpleTest y tendrá una de dos opciones, refactorizar sus pruebas para trabajar con SimpleTest o modificar el núcleo para usar PHPUnit.
Sin embargo, debería decirse que Mark Story ha declarado que CakePHP 2.0 utilizará PHPUnit para su marco de prueba, por lo que si puede esperar hasta entonces, esa puede terminar siendo la mejor opción.
Es relativamente fácil. Utilizo Cake 1.3 de la instalación del compositor. Así es como se ve mi compositor.json:
{
"config": {
"vendor-dir": "vendors/composer"
},
"require": {
"phpunit/phpunit": "3.7.*",
"cakephp/cakephp-1.3": "1.3",
},
"repositories": [
{
"type": "package",
"package": {
"name": "cakephp/cakephp-1.3",
"version": "1.3",
"source": {
"url": "https://github.com/cakephp/cakephp.git",
"type": "git",
"reference": "1.3"
}
}
}
]
}
Luego, el archivo phpunit bootstrap.php en el directorio de pruebas:
<?php
include(''../vendors/composer/autoload.php'');
include(''../webroot/index.php'');
Este es phpunit.xml del mismo directorio:
<?xml version="1.0" encoding="UTF-8"?>
<phpunit
bootstrap="bootstrap.php"
backupStaticAttributes="false"
cacheTokens="false"
colors="false"
convertErrorsToExceptions="true"
convertNoticesToExceptions="true"
convertWarningsToExceptions="true"
forceCoversAnnotation="false"
mapTestClassNameToCoveredClassName="false"
printerClass="PHPUnit_TextUI_ResultPrinter"
processIsolation="false"
stopOnError="false"
stopOnFailure="false"
stopOnIncomplete="false"
stopOnSkipped="false"
testSuiteLoaderClass="PHPUnit_Runner_StandardTestSuiteLoader"
strict="false"
verbose="false"
>
<testsuites>
<testsuite name="AllTests">
<directory>.</directory>
</testsuite>
</testsuites>
<filter>
<blacklist>
<directory suffix=".php"></directory>
<file></file>
<exclude>
<directory suffix=".php"></directory>
<file></file>
</exclude>
</blacklist>
<whitelist processUncoveredFilesFromWhitelist="true">
<directory suffix=".php"></directory>
<file></file>
<exclude>
<directory suffix=".php"></directory>
<file></file>
</exclude>
</whitelist>
</filter>
</phpunit>
No olvide cargar sus clases de aplicación en la configuración de prueba. Puedes hacerlo cakephp manera. Por ejemplo, si su controlador se denomina calendario, su calendarioTest.php puede verse así:
<?php
/**
* Class ComponentsCommonTest
* @property calendarController $calendarController
*/
class CalendarTest extends PHPUnit_Framework_TestCase
{
/**
* @var calendarController $calendarController
*/
private $calendarController;
function setUp()
{
App::import(''Core'', array(''View'', ''Controller'', ''Model'', ''Router''));
App::import(''Controller'', ''Calendar'');
$this->calendarController =& new CalendarController();
$this->calendarController->constructClasses();
$this->calendarController->layout = null;
}
}
Lo mismo para modelos, clases de proveedores, etc. Funciona muy bien para mi