2013-05-02 8 views
6

sto cercando di testare un tipo di modulo che ho creazione che utilizza un campo con classe di entitàSymfony2 misura Tipo modulo utilizzando entità cercando di testarlo

qui è la creazione della forma

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

Questo funziona molto bello quando ho costruire la forma, ma poi sto cercando di unit test questo tipo

seguito this example su come testare le mie tipi di moduli personalizzati

sono get ting questo errore

Symfony \ Component \ Form \ Exception \ Eccezione: Impossibile caricare il tipo "entità"

L'errore è causato all'inizio del test di unità in questo comando:

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

qualsiasi idee su come risolvere questo errore per testare il mio tipo di modulo personalizzato usando le entità?

grazie in anticipo

+0

Attualmente, Symfony supporta l'EntityType fuori dalla scatola, ma non dispone di un modo corretto di test di unità it: https://github.com/symfony/symfony/issues/15098. –

risposta

3

Immagino che non può costituire prova di unità con tipi di entità, perché è definito come un servizio. Hai provato adding it manually?

MODIFICA: IMHO si dovrebbe prendere in giro il tipo di entità, perché coinvolge la dottrina, che dipende da una connessione di database esistente e quindi dal kernel completo caricato. Quindi non fai più test unitari. Questo sarebbe un test funzionale. Forse questo è il motivo, perché non è disponibile nel test dell'unità.

+0

Dal mio punto di vista, questo metodo viene utilizzato quando un tipo di modulo dipende da un altro tipo di modulo, dove nella mia causa è un'entità che viene passata a un'entità scelta. Sono riuscito a testare i tipi di moduli semplici ma non quelli che usano il tipo di entità :( – auslander

+0

Come nella mia modifica, dovresti prendere in giro il tipo di entità. –

0

Aggiungere null per i secondi parametri nel metodo create.

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

Secondo la documentazione di symfony sotto Adding a Type your Form Depends on

Per creare correttamente il modulo, è necessario effettuare il tipo di disposizione fabbrica forma nel test. Il modo più semplice è quello di registrarlo manualmente prima di creare il form padre utilizzando la classe 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 
    } 
}