これまでのところ、次のように ZF2 コントローラーをテストしてきました。
namespace Application\Controller;
use Application\Controller\IndexController;
use Zend\Http\Request;
use Zend\Http\Response;
use Zend\Mvc\MvcEvent;
use Zend\Mvc\Router\RouteMatch;
use PHPUnit_Framework_TestCase;
class IndexControllerTest extends PHPUnit_Framework_TestCase
{
public function testIndexActionCanBeAccessed()
{
$this->routeMatch->setParam('action', 'index');
$result = $this->controller->dispatch($this->request);
$response = $this->controller->getResponse();
$this->assertEquals(200, $response->getStatusCode());
$this->assertInstanceOf('Zend\View\Model\ViewModel', $result);
}
protected function setUp()
{
\Zend\Mvc\Application::init(include 'config/application.config.php');
$this->controller = new IndexController();
$this->request = new Request();
$this->routeMatch = new RouteMatch(array('controller' => 'index'));
$this->event = new MvcEvent();
$this->event->setRouteMatch($this->routeMatch);
$this->controller->setEvent($this->event);
}
protected $controller = null;
protected $event = null;
protected $request = null;
protected $response = null;
protected $routeMatch = null;
}
これにより、ビューがレンダリングされる前に、ViewModel に正しいデータ (存在する場合) が割り当てられていることをテストできます。これはその目的に十分に役立ちますが、ZF1 テストのようにルーティングが正しく機能していることをテストすることはできませんZend_Test_PHPUnit_Controller_TestCase
。
それらの中で、実行してテストを開始し$this->dispatch('/some/relative/url')
、ルートが正しく設定されている場合にのみ肯定的なテスト結果を取得します. これらの ZF2 テストでは、使用するルートを具体的に示していますが、実際のリクエストが正しくルーティングされるとは限りません。
ルーティングが ZF2 で正しく機能していることをテストするにはどうすればよいですか?