phpunit を使用して REST 更新メソッドをテストしようとしています。リクエスト オブジェクトを作成し、ルートを照合して、コントローラーにディスパッチします。
$this->routeMatch->setParam('id', '1');
$this->request->setMethod(Request::METHOD_PUT);
$result = $this->controller->dispatch($this->request);
すべて正常に動作していますが、私が抱えている問題は、このリクエストでデータを渡す方法です。post または get メソッドでアタッチしようとしましたが、うまくいきませんでした:
$this->request->getQuery()->set('description', 'foo'); //Nope
$this->request->getPost()->set('description', 'foo'); //Nope
->getPut() メソッドが表示されません... put メソッドを使用するリクエスト オブジェクトにデータを追加するにはどうすればよいですか? 一致したルート ID を除いて、コントローラーでパラメーターが通過することはありません。
アップデート:
//Create mocks:
$statusMock=new Status();
$statusMock->exchangeArray($testData);
$statusTableMock = $this->getMockBuilder('Status\Model\StatusTable')
->disableOriginalConstructor()
->getMock();
$statusTableMock->expects($this->any())
->method("getStatus")
->will($this->returnValue($statusMock));
$statusTableMock->expects($this->once())
->method('updateStatus')
->will($this->returnValue(array()));
//pass mocks to service manager, will use mocks instead of actual model
$serviceManager = Bootstrap::getServiceManager();
$serviceManager->setAllowOverride(true);
$serviceManager->setService('Status\Model\StatusTable', $statusTableMock);
//set route and request object
$this->routeMatch->setParam('id', '1');
$this->request->setMethod(Request::METHOD_PUT);
//try to attach data
$this->request->getQuery()->set('description', 'foo'); //NOPE!
$this->request->getPost()->set('title', 'bar'); //NOPE!
//Send and test
$result = $this->controller->dispatch($this->request);
$this->assertResponseStatusCode(200);
更新2 これは機能します:
$ curl -i -H "Accept: application/json" -X PUT -d "title=something&description=something else" http://mysite.com
では、Zend\Http\Request オブジェクトでそれを行うにはどうすればよいでしょうか?