5

こんにちは、Zendは初めてで、Z2で開発するように依頼されました。コントローラプラグインを介して再利用可能な機能を追加しようとしていますが、単体テストで成功していません。通常のアプリケーション内で正常に動作します。

// Application\Controller\Plugin\HelloWorld.php
namespace Application\Controller\Plugin;

use Zend\Mvc\Controller\Plugin\AbstractPlugin;
use Zend\Http\Client;
use Zend\Http\Request;

class HelloWorld extends AbstractPlugin
{

    public function helloWorld()
    {
        return "HELLO WORLD";
    }
}

// Application\Controller\IndexController.php
namespace Application\Controller;

use Zend\Mvc\Controller\AbstractActionController;
use Zend\View\Model\ViewModel;

class IndexController extends AbstractActionController
{

    public function indexAction()
    {
        echo $this->helloworld()->helloWorld();
    }
}

//Application\config\module.config.php
...
'controller_plugins' => array(
     'invokables' => array(
          'helloworld' => 'Application\Controller\Plugin\HelloWorld',
      ),
 ),
...

私が得るエラーは次のとおりです。

Zend\ServiceManager\Exception\ServiceNotFoundException: Zend\ServiceManager\ServiceManager::get was unable to fetch or create an instance for helloworld
4

1 に答える 1

12

コントローラーの単体テストを作成する場合は、専用の制御されたユニットでコントローラーをテストします。アプリケーションを初期化せず、モジュールをロードせず、完全な構成ファイルを解析しません。

コントローラを単体テストするには、setUp()メソッドにプラグインを自分で追加して、サービスマネージャで直接呼び出し可能としてプラグインを配置します。構成が機能するかどうかをテストする場合は、機能テストを検討します。最初に完全なアプリケーションをブートストラップしてから、要求を作成して応答をアサートすることにより、コントローラーをテストしてください。

機能テストは解決するのが少し難しいので、単体テストでテストするためにコントローラー(プラグイン)から始める方が簡単です。

namespace SlmLocaleTest\Locale;

use PHPUnit_Framework_TestCase as TestCase;
use Application\Controller\IndexController;

class IndexControllerTest extends TestCase
{
    public function setUp()
    {
        $controller = new IndexController;
        $controller->getPluginManager()
                   ->setInvokableClass('helloworld', 'Application\Controller\Plugin\HelloWorld');

        $this->controller = $controller;
    }

    public function testCheckSomethingHere()
    {
        $response = $this->controller->indexAction();
    }
}

たとえば、に置き換えてモックを注入できますsetInvokableClass()setService()

于 2012-10-31T16:52:39.847 に答える