2013-05-02 20 views
6

Próbuję przetestować rodzaj formularza Mam tworząc który wykorzystuje pole z klasy podmiotuSymfony2 Niestandardowy typ forma korzystania podmiot próbuje przetestować

tutaj jest stworzenie postaci

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

ten działa bardzo miłe kiedy zbudować formę, ale wtedy staram się badanej jednostki tego typu

po this example, w jaki sposób testować moje niestandardowe typy formularzy

Jestem get ting ten błąd

Symfony \ Komponent \ Form \ Wyjątek \ Wyjątek: Nie można załadować typu „podmiot”

Błąd spowodowany jest na początku testów jednostkowych w tym poleceniem:

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

dowolny pomysły, jak naprawić ten błąd, aby przetestować mój niestandardowy typ formularza za pomocą encji?

góry dzięki

+0

Obecnie Symfony wspiera EntityType po wyjęciu z pudełka, ale nie ma odpowiedniej drogi do testów jednostkowych to: https://github.com/symfony/symfony/issues/15098. –

Odpowiedz

3

Chyba nie może tworzyć testy jednostkowe z typów jednostek, ponieważ jest zdefiniowana jako usługa. Czy próbowałeś już adding it manually?

EDIT: IMHO należy drwić typ jednostki, ponieważ wiąże się doktryny, która zależy od istniejącego połączenia z bazą danych i tak dalej pełnego jądra załadowany. Więc nie jesteś już testem jednostkowym. To byłby test funkcjonalny. Może to jest powód, dlaczego nie jest dostępny w teście jednostkowym.

+0

Z mojego rozumowania, ta metoda jest używana, gdy typ formularza zależy od innego typu formularza, gdzie w mojej sprawie jest to jednostka, która jest przekazywana do wybranej jednostki. Udało mi się przetestować proste typy formularzy, ale nie te, które używają typu jednostki :( – auslander

+0

Tak jak w mojej edycji, powinieneś wyśmiewać typ jednostki. –

0

Dodaj wartość null dla drugich parametrów w metodzie create.

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

Zgodnie z docs symfony pod Adding a Type your Form Depends on

Aby utworzyć poprawnie formularz, trzeba zrobić rodzaj dostępnych fabrykę formularz w teście. Najprostszym sposobem jest zarejestrowanie ręcznie przed utworzeniem formularza nadrzędnego za pomocą klasy 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 
    } 
}