我發現了一堆示例如何單元測試Zend_Controller,但我正在尋找Zend_Rest_Controller單元測試的示例。任何幫助真的很感激。謝謝!Zend_Rest_Controller單元測試示例
1
A
回答
1
所以,基本上你的問題是如何模擬調用你的控制器測試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/en/zend.controller.router.html#zend.controller.router.routes.rest
0
/**
* 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
這裏有一個關於如何創建REST API的好資源:http://techchorus.net/create-restful-applications-using-zend-骨架 – eistrati
相關問題
- 1. EntityFramework單元測試示例
- 2. 單元測試示例
- 3. 單元測試示例證明單元測試值得一寫
- 4. 單元測試IDN域的示例URI
- 5. Go Martini單元測試示例
- 6. 自動單元測試示例代碼
- 7. 帶單元測試的示例項目
- 8. EJB單元測試用例
- 9. GWT單元測試用例
- 10. MVC單元測試用例
- 11. 單元測試的例子?
- 12. 單元測試例外
- 13. Groovy單元測試用例
- 14. 單元測試和集成測試示例
- 15. 驗收測試與單元測試示例
- 16. 帶Zend_Rest_Client的工作示例Zend_Rest_Controller?
- 17. 顯示pygame單元測試
- 18. 簡單的ResourceManager示例不能在單元測試中工作
- 19. Zend_Rest_Controller和Zend_Rest_Route使用案例
- 20. Rspec單元測試用例失敗
- 21. Java單元測試例外預期
- 22. 單元測試用例visual studio
- 23. 駱駝單元測試用例問題
- 24. 單元測試用例在Xcode
- 25. DART - 單元測試中的例外
- 26. 如何單元測試實例創建?
- 27. 實例注入Android單元測試
- 28. 使用Assert的單元測試案例
- 29. JFC單元測試教程/例如
- 30. 增強單元測試例外
是不是一個控制器以及?與標準控制器不同的是,您不能使用控制器的標準測試嗎? – hakre
方法PUT和DELETE - 請參考[Wiki on rest](http://en.wikipedia.org/wiki/Representational_State_Transfer) – eistrati
我知道剩下的是什麼。測試PUT和DELETE時有什麼問題? – hakre