2013-05-02 8 views
6

Ich versuche, ein Formulartyp zu testen ich die Erstellung haben, dass verwendet ein Feld mit Klasse EinheitSymfony2 Benutzerdefinierte Formulartyp versucht, mit Einheit zu testen

hier ist die Schaffung Form

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

Diese funktioniert sehr schön, wenn ich die Form zu bauen, aber ich versuche, um Unit-Test dieser Art

nach this example wie meine benutzerdefinierten Formulartypen

ich bin get dann testen ting dieser Fehler

Exception \ Exception Symfony \ Component \ Formular \: load "entity" Typ konnte nicht

Der Fehler am Anfang der Einheit Test bei diesem Befehl verursacht wird:

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

beliebige Ideen, wie Sie diesen Fehler beheben können, um meinen benutzerdefinierten Formulartyp mit Entitäten zu testen?

Dank im Voraus

+0

Derzeit unterstützt Symfony die EntityType aus der Box, aber keinen richtigen Weg, um Unit-Test hat es: https://github.com/symfony/symfony/issues/15098. –

Antwort

3

Ich denke, Sie nicht Unit-Test-Form mit Entity-Typen können, weil es als ein Dienst definiert ist. Haben Sie versucht adding it manually?

EDIT: IMHO sollten Sie den Entitätstyp verspotten, weil es Lehre beinhaltet, die auf einer vorhandenen Datenbankverbindung und so weiter auf dem vollen Kernel basiert. Du bist also kein Unit-Test mehr. Dies wäre ein Funktionstest. Vielleicht ist das der Grund, warum es im Komponententest nicht verfügbar ist.

+0

Aus meiner Sicht wird diese Methode verwendet, wenn ein Formulartyp von einem anderen Formulartyp abhängt, wobei in meiner Ursache eine Entität an eine Auswahleinheit übergeben wird. Ich habe es geschafft, einfache Formulartypen zu testen, aber nicht die, die den Entitätstyp verwenden :( – auslander

+0

Wie in meiner Bearbeitung sollten Sie den Entitätstyp vortäuschen. –

0

Fügen Sie null für zweite Parameter in Methodenerstellung hinzu.

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

Nach der symfony-Dokumentation unter Adding a Type your Form Depends on

Formular korrekt erstellen, müssen Sie die Art zu das Formular ab Werk in Ihrem Test zur Verfügung stellen. Der einfachste Weg, es manuell registrieren ist, bevor die übergeordnete Form der Erstellung der PreloadedExtension -Klasse:

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 
    } 
} 
Verwandte Themen