2013-05-02 24 views
6

我想測試我已經創建使用現場帶班實體使用實體試圖測試

這裏表單類型Symfony2的自定義表單類型的形式

$builder 
      ->add('name', 'text') 
      ->add('description', 'textarea') 
      ->add('services', 'entity', array('class' => 'MyBundle:Service', 'group_by' => 'category.name', 'property' => 'name', 'multiple' => true, 'required' => false)); 

此創建當我建的形式,但後來我試圖單元測試這種類型

this example如何測試我自定義表單類型

我GET作品非常漂亮廷此錯誤

的Symfony \元器件\表格\異常\例外:未能加載類型「實體」

該錯誤是在單元測試中的該命令的開始引起的:

$type = new MyType(); 
    $form = $this->factory->create($type); 

任何想法如何解決這個錯誤,以測試我的自定義表單類型使用實體?

在此先感謝

+0

目前,Symfony的支持的EntityType開箱即用,但沒有進行單元測試有道它:https://github.com/symfony/symfony/issues/15098。 – 2015-10-09 07:56:33

回答

3

我想你不能單元測試表單與實體類型,因爲它被定義爲一個服務。你有沒有試過adding it manually

編輯:恕我直言,你應該嘲笑實體類型,因爲它涉及的教條,它取決於現有的數據庫連接等加載完整的內核。所以你不再是單元測試。這將是一個功能測試。也許這就是爲什麼它在單元測試中不可用的原因。

+0

根據我的理解,當表單類型依賴於另一個表單類型時,使用此方法,在我的原因中,它是一個正在傳遞給選擇實體的實體。我已經設法測試簡單的表單類型,但不是使用實體類型的那些:( – auslander 2013-05-03 08:57:20

+0

正如在我的編輯中,你應該模擬實體類型。 – 2013-05-03 17:23:38

0

爲create方法中的第二個參數添加null。

$type = new MyType(); 
$form = $this->factory->create($type, null); 
1

根據symfony的文檔下Adding a Type your Form Depends on

要正確地創建表單,您需要提供類型 形式工廠測試。最簡單的方法是使用PreloadedExtension 類創建父窗體之前手動註冊 :

class TestedTypeTest extends TypeTestCase 
{ 
    protected function getExtensions() 
    { 
     $childType = new TestChildType(); 
     return array(new PreloadedExtension(array(
      $childType->getName() => $childType, 
     ), array())); 
    } 

    public function testSubmitValidData() 
    { 
     $type = new TestedType(); 
     $form = $this->factory->create($type); 

     // ... your test 
    } 
}