2013-10-02 80 views
0

所以試圖對我的Symfony控制器編寫單元測試,並擊中這個障礙。在symfony中使用phpunit嘲諷formbuilder

我的控制器方法返回一個表單,我想檢查這種形式的值,以確保它是預期的。

  1. 我找不到任何方法來正確地嘲笑formbuilder,
  2. 我不知道我怎麼就可以驗證傳遞給它的價值,即使我可以嘲笑它

這裏是這樣,當Symfony的從上下文要求爲「form.factory」,它接收我的$ formBuilder什麼我有(蒸餾)

$formBuilder = $this->getMock('Symfony\Component\Form\Tests\FormBuilderInterface',Array('add')); 

$formFactory = $this->getMock('Symfony\Component\Form\FormFactoryInterface'); 

$formFactory 
     ->expects($this->any()) 
     ->method('createBuilder') 
     ->will($this->returnValue($formBuilder)); 

和設置。

然後在我的控制器,一個簡單的形式

$form = $this->createFormBuilder($task) 
     ->add('CountryCode', 'text') 
     ->add('State', 'text') 
     ->add('Locality', 'text') 
     ->add('OrganizationName', 'text') 
     ->add('OrganizationalUnitName', 'text') 
     ->add('CommonName', 'text') 
     ->add('EmailAddress', 'text') 
     ->add('company', 'text') 
     ->add('save', 'submit') 
     ->getForm(); 

我已經驗證CreateFormBuilder調用基控制器實際上是在返回嘲笑表單生成器界面,但是add方法不可用,它一切都只是吹了

Fatal error: Call to a member function add() on a non-object 

這意味着我的formbuilder沒有做正確的事...

所以,我已經看到了很多討論,ABO血型除了「不要單元測試你的控制器方法」之外,沒有答案,這不是一個好的答案。 Symfony文檔是關於單元測試他們的FormBuilder功能,這是奇怪的... http://symfony.com/doc/current/cookbook/form/unit_testing.html

回答

0

你會得到錯誤,因爲鏈接的formBuilders'add'方法。你的模擬formBuilder添加方法將需要返回自己。

$formBuilder->expects($this->any()) 
     ->method('add') 
     ->will($this->returnSelf()); 
+0

就是這樣。謝謝。任何關於如何以一種讓我們檢查控制器在窗體中設置的值的方式來做這件事的想法? –