2017-05-26 70 views
2

我想要開始使用symfony 3的UnitTest過程,我仍然困惑如何做到這一點以及如何測試我的表單,我遵循官方文檔和說明來創建識別TestClass:UnitTest formType Symfony 3

TestFormType:

<?php 

namespace Tests\EvalBundle\Form\Type; 

use EvalBundle\Form\DepartmentType; 
use EvalBundle\Entity\Department; 
use Symfony\Component\Form\Test\TypeTestCase; 

class DepartmentTypeTest extends TypeTestCase 
{ 
    public function testSubmitValidData(){ 

     $formData = array(
      'name' => 'test', 
     ); 

     $departmentType = new DepartmentType(); 
     $form = $this->factory->create($departmentType); 

     $department = new Department(); 
     $department = fromArray($formData); 

     $form->submit($formData); 

     $this->assertTrue($form->isSynchronized()); 
     $this->assertEquals($department, $form->getData()); 
     $view = $form->createView(); 
     $children = $view->children; 

     foreach (array_keys($formData) as $key) { 
      $this->assertArrayHasKey($key, $children); 
     } 


    } 


} 
?> 

我有一些errors這些功能:

fromArray,assertTrue,assertEquals,assertArrayHasKey : they are not undefined. 

這裏是一個有些熟悉的這可以幫助我理解這個概念嗎?

+1

'fromArray'方法是不存在的。另外,在我看來,表單的測試給出了太多的錯誤。 – jjoselon

回答

1
  • 嘗試使用$this->factory->create(DepartmentType::class)代替

$departmentType = new DepartmentType(); $form = $this->factory->create($departmentType);

如果問題仍然存在可能由下列問題之一是原因:

  • 方法fromArray不存在你的代碼。我建議飼養Department對象由像$department->setName('test');這樣的套餐。在Symfony3文獻資料法fromArray被提及,但我們應該ourselfs

  • assertTrueassertEqualsassertArrayHasKey實現此方法 - 建議您使用不正確TestTypeCase類。

下面我粘貼工作的單元測試形式域emailsurname

<?php 

namespace Tests\AppBundle\Form; 

use Symfony\Component\Form\Test\TypeTestCase; 
use AppBundle\Form\RecipientType; 
use AppBundle\Entity\Recipient; 

class RecipientTypeTest extends TypeTestCase 
{ 
    public function testAddRecipient() 
    { 
     $formData = array(
      'email' => '[email protected]', 
      'surname' => 'Doe', 
     ); 

     $form = $this->factory->create(RecipientType::class); 

     $object = new Recipient(); 
     $object->setEmail($formData['email']); 
     $object->setSurname($formData['surname']); 

     // submit the data to the form directly 
     $form->submit($formData); 

     $this->assertTrue($form->isSynchronized()); 
     $this->assertEquals($object, $form->getData()); 

     $view = $form->createView(); 
     $children = $view->children; 

     foreach (array_keys($formData) as $key) { 
      $this->assertArrayHasKey($key, $children); 
     } 
    } 
} 
0

考慮通過功能測試來測試表單而不是單元。

+0

你的回答沒有幫助 – janek1

+0

你有沒有嘗試過,所以你可以幫助我和任何其他人尋找答案? – sahnoun

+1

學習Symfony測試的好方法是從GitHub下載相同的小包,並分析代碼(包含測試封面信息)。 示例測試視圖退出並具有HTML標記H1: <?php namespace MyBundle \ Tests \ Controller; 使用MyBundle \ Test \ WebTestCase; class TasksControllerTest extends WebTestCase { public function testAllTask​​s() {client} = static :: createClient(); $ crawler = $ client-> request('GET','/ tasks'); $ this-> assertGreaterThan(0,$ crawler-> filter('h1') - > count()); } } – Grene