Ho fatto questa domanda su StackOverflow ed è stato suggerito di farlo qui.
Ho familiarità con i test di unità / sistema / integrazione e vorrei essere in grado di testare il mio componente Joomla. Esiste un modo standard per farlo?
Sto lavorando a questo esempio di componente Joomla mvc , che non include i test. Tutto quello che posso trovare nella documentazione di Joomla e su vari siti web sono frammenti di codice di test e file bootstrap.php. In particolare, ciò che vorrei sapere è:
- Dove mettere il codice di prova del componente
- Devo fornire il mio bootstrap.php o c'è un modo per 'includere joomla' ed eseguire i miei test
Idealmente qualcuno potrebbe indirizzarmi a un componente Joomla open source che ha test e istruzioni su come eseguirli (ha dato una rapida occhiata, i primi 5 o giù di lì non avevano test).
Il più vicino che ho trovato è questo , sul quale ho basato il mio test fittizio.
Quello che ho fatto finora
Struttura della directory dei componenti:
- Ciao mondo/
- admin /
- ...
- test /
- bootstrap.php
- phpunit.xml
- modelHelloWorldsTest.php
- luogo/
- ...
- helloworld.xml
- admin /
Primo tentativo
Per eseguire i test, installo / copio il componente nella mia installazione di Joomla. Quindi eseguo il comando seguente da ~ joomla / administration / components / com_helloworld / tests:
php phpunit-4.2.phar --bootstrap bootstrap.php .
da cui ricevo
Fatal error: Class 'ContentController' not found in C:\inetpub\wwwroot\ws_cairnstest\administrator\components\com_helloworld\tests\modelsHelloWorldsTest.php on line 5
Ho capito che questo significa che il mio bootstrap.php non è corretto e non ha caricato le classi Joomla necessarie. Lo esaminerò a un certo punto, ma questo sembra un sacco di installazione solo per ottenere alcuni test da eseguire.
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>
Secondo tentativo
Dopo aver visto questa risposta , ho messo i miei test sotto test / unità nella mia installazione di joomla, ho copiato phpunit.dist.xml e bootstrap.php dal repository joomla-cms nelle loro posizioni appropriate, e ho ancora ottenuto il
Fatal error: Class 'ContentController' not found in C:\inetpub\wwwroot\ws_cairnstest\administrator\components\com_helloworld\tests\modelsHelloWorldsTest.php on line 5
errore che stavo ricevendo prima.