Saya telah menanyakan pertanyaan ini di StackOverflow , dan disarankan agar saya bertanya di sini.
Saya akrab dengan pengujian unit / sistem / integrasi, dan ingin dapat menguji komponen Joomla saya. Apakah ada cara standar untuk melakukan ini?
Saya sedang mengerjakan contoh komponen joomla mvc ini , yang tidak termasuk tes. Yang bisa saya temukan di dokumentasi Joomla dan di berbagai situs web adalah fragmen kode uji & file bootstrap.php. Khususnya apa yang ingin saya ketahui adalah:
- Di mana menempatkan kode uji komponen
- Apakah saya perlu memberikan bootstrap.php saya sendiri, atau adakah cara untuk hanya 'memasukkan joomla' dan menjalankan tes saya
Idealnya seseorang dapat mengarahkan saya ke komponen Joomla open source yang memiliki tes & instruksi tentang cara menjalankannya (melihat sekilas, pertama 5 atau lebih tidak memiliki tes).
Yang paling dekat yang saya temukan adalah ini , yang menjadi dasar pengujian dummy saya.
Apa yang telah saya lakukan sejauh ini
Struktur direktori komponen:
- Halo Dunia/
- admin /
- ...
- tes /
- bootstrap.php
- phpunit.xml
- modelHelloWorldsTest.php
- situs /
- ...
- helloworld.xml
- admin /
Percobaan pertama
Untuk menjalankan tes, saya menginstal / menyalin komponen ke instalasi Joomla saya. Saya kemudian menjalankan perintah berikut dari ~ joomla / administration / components / com_helloworld / tests:
php phpunit-4.2.phar --bootstrap bootstrap.php .
dari mana saya terima
Fatal error: Class 'ContentController' not found in C:\inetpub\wwwroot\ws_cairnstest\administrator\components\com_helloworld\tests\modelsHelloWorldsTest.php on line 5
Saya mengumpulkan ini berarti bootstrap.php saya tidak benar dan belum memuat kelas Joomla yang diperlukan. Saya akan menyelidiki ini di beberapa titik, tetapi ini sepertinya banyak pengaturan hanya untuk mendapatkan beberapa tes untuk dijalankan.
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>
Usaha kedua
Setelah melihat jawaban ini , saya meletakkan tes saya di bawah test / unit di bawah instalasi joomla saya, menyalin phpunit.dist.xml dan bootstrap.php dari repo joomla-cm ke lokasi yang sesuai, dan masih mendapatkan
Fatal error: Class 'ContentController' not found in C:\inetpub\wwwroot\ws_cairnstest\administrator\components\com_helloworld\tests\modelsHelloWorldsTest.php on line 5
kesalahan yang saya terima sebelumnya.