Eu fiz essa pergunta no StackOverflow e foi sugerido que eu faça aqui.
Estou familiarizado com os testes de unidade / sistema / integração e gostaria de poder testar meu componente Joomla. Existe uma maneira padrão de fazer isso?
Estou trabalhando neste exemplo de componente do joomla mvc , que não inclui testes. Tudo o que posso encontrar na documentação do Joomla e em vários sites são fragmentos de código de teste e arquivos bootstrap.php. Especificamente, o que eu gostaria de saber é:
- Onde colocar o código de teste do componente
- Preciso fornecer meu próprio bootstrap.php ou existe alguma maneira de apenas 'incluir o joomla' e executar meus testes
Idealmente, alguém poderia me direcionar para um componente Joomla de código aberto que possui testes e instruções sobre como executá-los (deu uma olhada rápida, os primeiros 5 ou mais não tinham testes).
O mais próximo que encontrei é esse , no qual baseei meu teste fictício.
O que eu fiz até agora
Estrutura do diretório de componentes:
- Olá Mundo/
- admin /
- ...
- testes /
- bootstrap.php
- phpunit.xml
- modelHelloWorldsTest.php
- local/
- ...
- helloworld.xml
- admin /
Primeira tentativa
Para executar os testes, eu instalo / copio o componente na minha instalação do Joomla. Em seguida, executo o seguinte comando em ~ joomla / Administration / components / com_helloworld / tests:
php phpunit-4.2.phar --bootstrap bootstrap.php .
do qual eu recebo
Fatal error: Class 'ContentController' not found in C:\inetpub\wwwroot\ws_cairnstest\administrator\components\com_helloworld\tests\modelsHelloWorldsTest.php on line 5
Eu entendo que isso significa que meu bootstrap.php não está correto e não carregou as classes necessárias do Joomla. Vou investigar isso em algum momento, mas isso parece muita configuração apenas para que alguns testes sejam executados.
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>
Segunda tentativa
Depois de ver esta resposta , coloquei meus testes em test / unit em minha instalação do joomla, copiei phpunit.dist.xml e bootstrap.php do repositório joomla-cms para seus locais apropriados e ainda obtive o
Fatal error: Class 'ContentController' not found in C:\inetpub\wwwroot\ws_cairnstest\administrator\components\com_helloworld\tests\modelsHelloWorldsTest.php on line 5
erro que eu estava recebendo antes.