开发者

Examples on Zend_Rest_Controller Unit Testing

开发者 https://www.devze.com 2023-03-14 17:19 出处:网络
I have found a bunch of examples how to 开发者_StackOverflow社区unit test Zend_Controller, but I\'m looking for examples on Zend_Rest_Controller Unit Testing. Any help is really appreciated. Thank you

I have found a bunch of examples how to 开发者_StackOverflow社区unit test Zend_Controller, but I'm looking for examples on Zend_Rest_Controller Unit Testing. Any help is really appreciated. Thank you!


So, basically your question is how to emulate calling PUT and DELETE in your controller tests?
Since this apparently doesn't work:

$this->request->setMethod('PUT');

You can access both these actions with plain HTTP POST by providing _method parameter.

So to call PUT:

$this->request->setMethod('POST');
$this->dispatch('articles/123?_method=put');

To call DELETE:

$this->request->setMethod('POST');
$this->dispatch('articles/123?_method=delete');

More reading on how to deal with RESTful routing here - http://framework.zend.com/manual/en/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
    }

}
0

精彩评论

暂无评论...
验证码 换一张
取 消