Я поставив це питання на StackOverflow , і мені запропонували задати його тут.
Я знайомий з тестуванням модуля / системи / інтеграції і хотів би мати можливість протестувати свій компонент Joomla. Чи існує стандартний спосіб цього зробити?
Я працюю над цим прикладом компонента joomla mvc , який не включає тести. Все, що я можу знайти в документації Joomla та на різних веб-сайтах, - це фрагменти тестового коду та файли bootstrap.php. Конкретно, що я хотів би знати:
- Куди поставити код тесту компонента
- Чи потрібно мені надати свій власний bootstrap.php, чи є якийсь спосіб просто "включити joomla" та запустити мої тести
В ідеалі хтось міг би направити мене на відкритий джерело Joomla компонента, який має тести та інструкції, як їх запустити (був швидкий огляд, перші 5 або близько того не мали тестів).
Найближче, що я знайшов - це це , на чому я базувався на моєму манекені.
Що я робив до цих пір
Структура каталогу компонентів:
- Привіт Світ/
- адміністратор /
- ...
- тести /
- bootstrap.php
- phpunit.xml
- модельHelloWorldsTest.php
- сайт /
- ...
- helloworld.xml
- адміністратор /
Перша спроба
Для запуску тестів я встановлюю / копіюю компонент до моєї установки Joomla. Потім я запускаю таку команду з ~ joomla / адміністрування / компоненти / com_helloworld / тести:
php phpunit-4.2.phar --bootstrap bootstrap.php .
від якого я отримую
Fatal error: Class 'ContentController' not found in C:\inetpub\wwwroot\ws_cairnstest\administrator\components\com_helloworld\tests\modelsHelloWorldsTest.php on line 5
Я знаю, це означає, що мій bootstrap.php невірний і не завантажив необхідні класи Joomla. Я буду досліджувати це в якийсь момент, але це здається великою кількістю налаштувань просто для того, щоб запустити кілька тестів.
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';
моделіHelloWorldsTest.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>
Друга спроба
Побачивши цю відповідь , я поставив свої тести під тест / блок під мою інсталяцію Joomla, скопіював phpunit.dist.xml і bootstrap.php з репортажу joomla-cms у відповідні місця та все-таки отримав
Fatal error: Class 'ContentController' not found in C:\inetpub\wwwroot\ws_cairnstest\administrator\components\com_helloworld\tests\modelsHelloWorldsTest.php on line 5
помилка, яку я отримував раніше.