Я задал этот вопрос на StackOverflow , и мне предложили задать его здесь.
Я знаком с модульным / системным / интеграционным тестированием и хотел бы иметь возможность протестировать мой компонент Joomla. Есть ли стандартный способ сделать это?
Я работаю с этим примером компонента joomla mvc , который не включает тесты. Все, что я могу найти в документации Joomla и на различных сайтах, это фрагменты тестового кода и файлы bootstrap.php. В частности, что я хотел бы знать, это:
- Где разместить тестовый код компонента
- Нужно ли предоставлять свой собственный bootstrap.php, или есть какой-то способ просто «включить joomla» и запустить мои тесты
В идеале кто-то может направить меня к компоненту Joomla с открытым исходным кодом, в котором есть тесты и инструкции о том, как их запускать (был быстрый просмотр, первые 5 или около того не имели тестов).
Самое близкое, что я нашел, это то , на чем я основал свой фиктивный тест.
Что я сделал до сих пор
Структура каталогов компонентов:
- Привет, мир/
- админ /
- ...
- Тесты /
- bootstrap.php
- phpunit.xml
- modelHelloWorldsTest.php
- сайт /
- ...
- helloworld.xml
- админ /
Первая попытка
Для запуска тестов я устанавливаю / копирую компонент в мою установку Joomla. Затем я запускаю следующую команду из ~ joomla / Administration / components / com_helloworld / tests:
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';
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>
Вторая попытка
Увидев этот ответ , я поместил свои тесты в папку test / unit под моей установкой 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
ошибка, которую я получал раньше.