StackOverflowでこの質問をしましたが、ここで質問することをお勧めします。
ユニット/システム/統合テストに精通しているので、Joomlaコンポーネントをテストしたいと思います。これを行う標準的な方法はありますか?
私はテストを含まないこのjoomla mvcコンポーネントの例に取り組んでいます。JoomlaのドキュメントやさまざまなWebサイトで見つけることができるのは、テストコードとbootstrap.phpファイルの断片だけです。具体的に私が知りたいのは:
- コンポーネントのテストコードを配置する場所
- 独自のbootstrap.phpを提供する必要がありますか、それとも「joomla」を含めてテストを実行する方法がありますか
理想的には、テストと実行方法に関する指示があるオープンソースのJoomlaコンポーネントに誰かを誘導することができます(クイックルック、最初の5つはテストがありませんでした)。
私が見つけた最も近いものはこれで、私は私のダミーテストに基づいています。
これまでにやったこと
コンポーネントのディレクトリ構造:
- こんにちは世界/
- admin /
- ...
- テスト/
- bootstrap.php
- phpunit.xml
- modelHelloWorldsTest.php
- 地点/
- ...
- helloworld.xml
- admin /
最初の試み
テストを実行するには、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
以前に受け取っていたエラー。