He hecho esta pregunta en StackOverflow , y se sugirió que la haga aquí.
Estoy familiarizado con las pruebas de unidad / sistema / integración, y me gustaría poder probar mi componente Joomla. ¿Hay una forma estándar de hacer esto?
Estoy trabajando en este ejemplo de componente joomla mvc , que no incluye pruebas. Todo lo que puedo encontrar en la documentación de Joomla y en varios sitios web son fragmentos de código de prueba y archivos bootstrap.php. Específicamente, lo que me gustaría saber es:
- Dónde poner el código de prueba del componente
- ¿Necesito proporcionar mi propio bootstrap.php, o hay alguna forma de 'incluir joomla' y ejecutar mis pruebas?
Idealmente, alguien podría dirigirme a un componente de código abierto de Joomla que tenga pruebas e instrucciones sobre cómo ejecutarlas (echó un vistazo rápido, los primeros 5 más o menos no tenían pruebas).
Lo más cercano que he encontrado es esto , en el que he basado mi prueba ficticia.
Lo que he hecho hasta ahora
Estructura de directorio de componentes:
- Hola Mundo/
- administración/
- ...
- pruebas /
- bootstrap.php
- phpunit.xml
- modelHelloWorldsTest.php
- sitio/
- ...
- helloworld.xml
- administración/
Primer intento
Para ejecutar las pruebas, instalo / copio el componente en mi instalación de Joomla. Luego ejecuto el siguiente comando desde ~ joomla / administration / components / com_helloworld / tests:
php phpunit-4.2.phar --bootstrap bootstrap.php .
de donde recibo
Fatal error: Class 'ContentController' not found in C:\inetpub\wwwroot\ws_cairnstest\administrator\components\com_helloworld\tests\modelsHelloWorldsTest.php on line 5
Entiendo que esto significa que mi bootstrap.php no es correcto y no ha cargado las clases necesarias de Joomla. Investigaré esto en algún momento, pero parece una gran cantidad de configuraciones solo para ejecutar algunas pruebas.
bootstrap.php:
<?php
error_reporting(E_ALL);
define('_JEXEC', 1);
define('BASEPATH',realpath(dirname(__FILE__).'/../../'));
define('JOOMLA_PATH',realpath(dirname(__FILE__).'/../../../../../'));
define('JOOMLA_ADMIN_PATH',realpath(dirname(__FILE__).'/../../../../'));
$_SERVER['HTTP_HOST'] = 'localhost';
$_SERVER['REQUEST_METHOD'] = 'GET';
if (file_exists(JOOMLA_ADMIN_PATH . '/defines.php'))
{
include_once JOOMLA_ADMIN_PATH . '/defines.php';
}
if (!defined('_JDEFINES'))
{
define('JPATH_BASE', JOOMLA_ADMIN_PATH);
require_once JPATH_BASE . '/includes/defines.php';
}
require_once JPATH_BASE . '/includes/framework.php';
require_once JPATH_BASE . '/includes/helper.php';
require_once JPATH_BASE . '/includes/toolbar.php';
define('JPATH_COMPONENT',JOOMLA_ADMIN_PATH.'/components/com_content');
$app = JFactory::getApplication('administrator');
include BASEPATH.'/controller.php';
modelsHelloWorldsTest.php:
<?php
class HelloWorldsTest extends \PHPUnit_Framework_TestCase {
public function testList(){
$c = new ContentController();
$model = $c->getModel('helloworlds');
$worlds = $model->getItems();
var_dump($worlds);
$this->assertNotEmpty($worlds);
}
}
phpunit.xml:
<phpunit bootstrap="bootstrap.php"
colors="true"
convertErrorsToExceptions="true"
convertNoticesToExceptions="true"
convertWarningsToExceptions="true"
processIsolation="false"
stopOnFailure="false"
syntaxCheck="false"
verbose="true">
</phpunit>
Segundo intento
Después de ver esta respuesta , puse mis pruebas bajo prueba / unidad bajo mi instalación de joomla, copié phpunit.dist.xml y bootstrap.php del repositorio de joomla-cms en sus ubicaciones apropiadas, y aún obtuve el
Fatal error: Class 'ContentController' not found in C:\inetpub\wwwroot\ws_cairnstest\administrator\components\com_helloworld\tests\modelsHelloWorldsTest.php on line 5
error que estaba recibiendo antes