4
我剛開始使用Symfony2項目。 CRUD生成工具創建了一個默認的控制器和功能測試,我正在修改它來滿足我的需求。由控制器產生的編輯形式創建以下HTML:Symfony2&phpunit:啓用方法覆蓋
<form action="/app_dev.php/invoice/7" method="post" >
<input type="hidden" name="_method" value="PUT" />
<!-- ... -->
</form>
我想重寫HTTP方法的方法,因爲它使我在我的應用程序中創建語義路線。現在,我想用一個功能測試,以測試這種形式,使用以下:
$crawler = $client->click($crawler->selectLink('Edit')->link());
$form = $crawler->selectButton('Edit')->form(array(
'_method' => 'PUT',
// ...
));
$client->submit($form);
$this->assertEquals(302, $client->getResponse()->getStatusCode(), "Unexpected HTTP status code for POST /invoice/<id>/edit");
當我通過運行phpunit -c /app
執行測試,因爲狀態代碼是405,而不是預期的302
通過一些調試,我發現響應是MethodNotAllowedHttpException
。顯然,當通過PHPUnit運行測試時,method overriding(內部將POST請求與_method=PUT
參數組合到一個PUT請求中)不會發生。
這就是說,我的問題是:執行我的PHPUnit測試時,symfony爲什麼不重寫覆蓋的方法?
這個解決方案出現在我的腦海裏,但我試圖避免它,因爲我想要我的功能測試來模擬瀏覽器請求。由於我無法想出更合適的解決方案,因此我將以這種方式實施。 – Martijn