我目前正在使用Symfony2,並且正在用PHPUnit測試我的項目。 我想用錯誤的參數提交表單或者URL不完整時測試異常。用symfony2和phpunit修改表單動作
我去了通過Symfony2和PHPUnit的文檔,但沒有找到任何類/方法來這樣做。
如何更改表單動作的值?我想使用PHPUnit,所以創建的報告是最新的,我可以看到我的代碼的覆蓋範圍。
編輯:
爲了澄清我的問題,一些新的內容。 如何在我的控制器中測試以'>'開頭的行? (throw $this->createNotFoundException('Unable to find ParkingZone entity.');
)
當用戶修改操作鏈接時,控制器中的進程將通過異常(或錯誤消息,如果選擇此操作)。我如何測試這種情況?
控制器
/**
* Edits an existing ParkingZone entity.
*
* @Route("/{id}/update", name="parkingzone_update")
* @Method("post")
* @Template("RatpGarageL1Bundle:ParkingZone:edit.html.twig")
*/
public function updateAction($id)
{
$em = $this->getDoctrine()->getEntityManager();
$entity = $em->getRepository('RatpGarageL1Bundle:ParkingZone')->find($id);
if (!$entity) {
> throw $this->createNotFoundException('Unable to find ParkingZone entity.');
}
$editForm = $this->createForm(new ParkingZoneType(), $entity);
$deleteForm = $this->createDeleteForm($id);
$request = $this->getRequest();
$editForm->bindRequest($request);
if ($editForm->isValid()) {
$em->persist($entity);
$em->flush();
return $this->redirect($this->generateUrl('parkingzone_edit', array('id' => $id)));
}
return array(
'entity' => $entity,
'edit_form' => $editForm->createView(),
'delete_form' => $deleteForm->createView(),
);
}
檢視:
<form action="{{ path('parkingzone_update', { 'id': entity.id }) }}" method="post" {{ form_enctype(form) }}>
<div class="control-group">
{{ form_label(form.name, 'Name', { 'attr': {'class': 'control-label'} }) }}
<div class="controls error">
{{ form_widget(form.name, { 'attr': {'class': ''} }) }}
<span class="help-inline">{{ form_errors(form.name) }}</span>
</div>
</div>
<div class="control-group">
{{ form_label(form.orderSequence, 'Rang', { 'attr': {'class': 'control-label'} }) }}
<div class="controls error">
{{ form_widget(form.orderSequence, { 'attr': {'class': ''} }) }}
<span class="help-inline">{{ form_errors(form.orderSequence) }}</span>
</div>
</div>
<div class="control-group">
{{ form_label(form.image, 'Image', { 'attr': {'class': 'control-label'} }) }}
<div class="controls error">
{{ form_widget(form.image, { 'attr': {'class': ''} }) }}
<span class="help-inline">{{ form_errors(form.image) }}</span>
</div>
</div>
{{ form_rest(form) }}
<div class="form-actions">
<button type="submit" class="btn btn-primary">Enregistrer</button>
<a href="{{ path('parkingzone') }}" class="btn">Annuler</a>
</div>
</form>
你知道在Symfony的單元測試和功能測試之間的區別,並且你已經有一個PHPUnit的測試成功提交表單的你的控制器的測試類擴展了Symfony WebTestCase? – redbirdo 2012-07-17 09:35:50
我剛剛在底部回答了這個問題。請檢查我的答案。 – 2012-07-17 13:18:03
感謝您的額外信息。有兩點 - 當控制器拋出異常時,用戶在生產中看到的是「Oops,發生了錯誤」,這可以嗎?其次,正如我在原始答案中試圖解釋的那樣,您可以通過檢查來自操作的響應中包含「無法找到ParkingZone實體」來進行測試,Symfony將顯示包含異常消息的頁面。我會用一個例子更新我的原始答案。 – redbirdo 2012-07-18 09:08:06