Zend_Rest_Controller单元测试示例

| 我已经找到了很多如何对Zend_Controller进行单元测试的示例,但是我正在寻找有关Zend_Rest_Controller单元测试的示例。任何帮助都非常感谢。谢谢!     
已邀请:
        因此,基本上您的问题是如何在控制器测试中模拟调用
PUT
DELETE
? 由于这显然行不通:
$this->request->setMethod(\'PUT\');
通过提供
_method
参数,您可以使用普通
HTTP POST
访问这两个动作。 所以称
PUT
$this->request->setMethod(\'POST\');
$this->dispatch(\'articles/123?_method=put\');
呼叫
DELETE
$this->request->setMethod(\'POST\');
$this->dispatch(\'articles/123?_method=delete\');
在此处详细了解如何处理RESTful路由-http://framework.zend.com/manual/zh/zend.controller.router.html#zend.controller.router.routes.rest     
        
/**
 * Sample class to test a controller
 */
class ArticleControllerTest extends Zend_Test_PHPUnit_ControllerTestCase
{

    public $bootstrap;

    public function setUp()
    {
        // When bootstrap is called it will run function \'appBootstrap\'
        $this->bootstrap = array($this, \'appBootstrap\');
        parent::setUp();
    }

    public function appBootstrap()
    {
        $this->application = new Zend_Application(
            APPLICATION_ENV,
            APPLICATION_PATH . \'/configs/application.ini\');
        $this->application->bootstrap();
        $bootstrap = $this->application->getBootstrap();
        $front = $bootstrap->getResource(\'FrontController\');
        $front->setParam(\'bootstrap\', $bootstrap);
    }

    public function tearDown()
    {
        Zend_Controller_Front::getInstance()->resetInstance();
        $this->resetRequest();
        $this->resetResponse();
        parent::tearDown();
    }

    public function testIndexAction()
    {
        $testCases = array(
            \'/article/\',
            \'/article/id/123/\',
            \'/article/authorId/777/limit/5/\',
            \'/article/commentId/999/startDate/2011-06-01/endDate/2011-06-01/\',
        );

        foreach ($testCases as $url) {
            $this->request->setHeader(\'Content-Type\', \'text/json\');
            $this->dispatch($url);

            $this->assertResponseCode(200);
            $this->assertModule(\'default\');
            $this->assertController(\'article\');
            $this->assertAction(\'get\');

            $body = json_decode($this->response->getBody(), true);
            $this->assertNotEmpty($body);
            ...

            $this->resetRequest();
            $this->resetResponse();
        }
    }

    public function testGetAction()
    {
        // Same as $this->testIndexAction()
    }

    public function testPostAction()
    {
        // Similar to $this->testIndexAction()
        // Add $this->request->setMethod(\'POST\'); before dispatch
        // Change $this->assertResponseCode(200); to 201 as REST requires
    }

    public function testPutAction()
    {
        // Similar to $this->testIndexAction()
        // Add $this->request->setMethod(\'PUT\'); before dispatch
    }

    public function testDeleteAction()
    {
        // Similar to $this->testIndexAction()
        // Add $this->request->setMethod(\'DELETE\'); before dispatch
    }

}
    

要回复问题请先登录注册