0

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 オブジェクトでそれを行うにはどうすればよいでしょうか?

4

2 に答える 2

1

zf2のRESTfulなものにあまり精通していませんが、PUTの場合はリクエストの本文を読み取ると思うので、次を使用する必要がありますsetContent()

$this->request->setMethod(Request::METHOD_PUT)
              ->setContent("title=something&description=something else");
于 2013-03-05T06:43:51.887 に答える
1

Content-type も application/json に設定してください。私はそれに何時間も夢中になりました:

ZendFramework2 で PUT リクエストを送信するにはどうすればよいですか?

于 2013-05-01T20:05:10.977 に答える