Mic*_*ssa 1 php phpunit unit-testing routes zend-framework2
到目前为止,我一直在测试我的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;
}
Run Code Online (Sandbox Code Playgroud)
这允许我测试ViewModel在呈现视图之前是否具有分配给它的正确数据(如果有).这样做的目的很好,但它没有做的是测试我的路由是否像ZF1 Zend_Test_PHPUnit_Controller_TestCase
测试那样正常工作.
在那些,我通过运行$this->dispatch('/some/relative/url')
开始测试,只有在路线设置正确的情况下才能得到正面的测试结果.通过这些ZF2测试,我特别告诉它使用哪条路由,这并不一定意味着真正的请求将被正确路由.
如何测试我的路由在ZF2中是否正常工作?
我迟到了,但它对新手来说仍然有用.现在的解决方案是继承\Zend\Test\PHPUnit\Controller\AbstractControllerTestCase
,因此用法与ZF1非常相似:
class IndexControllerTest extends \Zend\Test\PHPUnit\Controller\AbstractHttpControllerTestCase
{
public function setUp()
{
$this->setApplicationConfig(
include __DIR__ . '/../../../../../config/application.config.php'
);
parent::setUp();
}
public function testIndexActionCanBeAccessed()
{
$this->dispatch('/');
$this->assertResponseStatusCode(200);
$this->assertModuleName('application');
$this->assertControllerName('application\controller\index');
$this->assertControllerClass('IndexController');
$this->assertMatchedRouteName('home');
$this->assertQuery('html > head');
}
}
Run Code Online (Sandbox Code Playgroud)
注意:这使用\Zend\Test\PHPUnit\Controller\AbstractHttpControllerTestCase
包括assertQuery($path)
以及其他与Web相关的方法.
归档时间: |
|
查看次数: |
2232 次 |
最近记录: |