バージョン2.1の公式ZendFramework2チュートリアルに従っています。 nit Testing セクションでは、module/Application/testでphpunitを実行することになっていますが、次の問題が発生しています。
user@xubuntu1210:~/Desktop/zf2-tutorial/module/Application/test$ phpunit
PHPUnit 3.7.13 by Sebastian Bergmann.
Configuration read from /home/user/Desktop/zf2-tutorial/module/Application/test/phpunit.xml.dist
E
Time: 0 seconds, Memory: 4.00Mb
There was 1 error:
1) ApplicationTest\Controller\IndexControllerTest::testIndexActionCanBeAccessed
Zend\ModuleManager\Exception\RuntimeException: Module (Application) could not be initialized.
/home/user/Desktop/zf2-tutorial/vendor/zendframework/zendframework/library/Zend/ModuleManager/ModuleManager.php:140
/home/user/Desktop/zf2-tutorial/vendor/zendframework/zendframework/library/Zend/ModuleManager/ModuleManager.php:81
/home/user/Desktop/zf2-tutorial/vendor/zendframework/zendframework/library/Zend/EventManager/EventManager.php:460
/home/user/Desktop/zf2-tutorial/vendor/zendframework/zendframework/library/Zend/EventManager/EventManager.php:204
/home/user/Desktop/zf2-tutorial/vendor/zendframework/zendframework/library/Zend/ModuleManager/ModuleManager.php:100
/home/user/Desktop/zf2-tutorial/vendor/zendframework/zendframework/library/Zend/Mvc/Application.php:239
/home/user/Desktop/zf2-tutorial/vendor/zendframework/zendframework/library/Zend/Test/PHPUnit/Controller/AbstractControllerTestCase.php:146
/home/user/Desktop/zf2-tutorial/vendor/zendframework/zendframework/library/Zend/Test/PHPUnit/Controller/AbstractControllerTestCase.php:173
/home/user/Desktop/zf2-tutorial/vendor/zendframework/zendframework/library/Zend/Test/PHPUnit/Controller/AbstractControllerTestCase.php:193
/home/user/Desktop/zf2-tutorial/vendor/zendframework/zendframework/library/Zend/Test/PHPUnit/Controller/AbstractControllerTestCase.php:236
/home/user/Desktop/zf2-tutorial/module/Application/test/ApplicationTest/Controller/IndexControllerTest.php:20
FAILURES!
Tests: 1, Assertions: 0, Errors: 1.
チュートリアルからIndexControllerTest.phpの内容をコピーしました。
<?php
namespace ApplicationTest\Controller;
use Zend\Test\PHPUnit\Controller\AbstractHttpControllerTestCase;
class IndexControllerTest extends AbstractHttpControllerTestCase
{
public function setUp()
{
$this->setApplicationConfig(
include '/home/user/Desktop/zf2-tutorial/config/application.config.php'
);
parent::setUp();
}
public function testIndexActionCanBeAccessed()
{
$this->dispatch('/'); // this is line 20
$this->assertResponseStatusCode(200);
$this->assertModule('application');
$this->assertControllerName('application_index');
$this->assertControllerClass('IndexController');
$this->assertMatchedRouteName('home');
}
}
アプリケーションが初期化されない理由がわからないので、ポインタをいただければ幸いです。
これは自動読み込みの問題であり、module_paths
のconfig/application.config.php
オプションに関連している可能性があります(チュートリアルでは、/path/to/application/config/test/application.config.php
にある問題です)。
そのapplication.config.php
はおそらく次のようになります。
return array(
'modules' => array(
'Application',
'Album',
),
'module_listener_options' => array(
'module_paths' => array(
'./module',
'./vendor',
),
),
);
問題を解決するには、./module
がアプリケーションのルートディレクトリの__DIR__ . '/../module
にあると仮定して、値application.config.php
を絶対パス(たとえばconfig/
)に変更します。
明確にするために:問題は、./module
がcwd
からの相対パスであるために発生します。 cwd
を実行しているときのphpunit
はテストディレクトリ内にあり、(明らかに)module
ディレクトリはありません。