Re: [symfony-it] Sintesi per symfony-it@googlegroups.com - 10 messaggi in 2 argomenti

7 views
Skip to first unread message

Eugenio Pombi

unread,
Jun 18, 2013, 5:50:40 AM6/18/13
to symfo...@googlegroups.com
intendo l'unità minima di test che puoi far girare in behat.

mettiamo che uno scenario non ti passa, l'iterazione dovrebbe essere:

faccio girare il test: test rosso
modifico il codice dell'implementazione
faccio girare il test: test rosso
modifico il codice dell'implementazione
faccio girare il test: test verde yu-huuu!!!

e non come sospetto tu stia fecendo

faccio girare il test: test rosso
ricreo il db
modifico il codice dell'implementazione
faccio girare il test: test rosso
ricreo il db
modifico il codice dell'implementazione
faccio girare il test: test verde yu-huuu!!!

con la seconda modalità perdi un sacco di tempo, inoltre siccome ogni volta che gira qualche test il sistema è in uno stato che è difficile da prevedere ti si possono creare delle interazioni infernali dovute a come ogni test modifica il sistema.

In ogni caso se hai una suite in piedi bella grossa ora a metterti a scrivere tutti gli hook di pulizia probabilmente ci muori :)
fossi in te però almeno rimuoverei i riferimenti per id in maniera che devi solo ricaricare le fixtures e non tutte le migrazioni, in questo modo i test diventano pure più leggibili: title = "unpublished article" è molto più espressivo di id = 56 ;)



Il giorno 18 giugno 2013 03:26, <symfo...@googlegroups.com> ha scritto:

Gruppo: http://groups.google.com/group/symfony-it/topics

    zero <tecla...@gmail.com> Jun 17 05:56AM -0700  

    Come accenato nel titolo ho un errore nel template dopo aver modificato il
    repo della mia entità ebook, l'errore e il seguente:
     
    Key "slug" for array with keys "0" does not exist in
    /home/trovasiracusa/public_html/zbook.zz/dev-www/src/Zlab/EbookBundle/Resources/views/Default/ebook.html.twig
    at line 15
    Non conoscendo symfony (stò sperimentando da 2/3 mesi a tempo perso) e
    sopratutto avendo lasciato qst mestier nel 2001 non sempre riesco a
    risolvere gli errori che mi si presentano, così ad intuito sembra che il
    template o non riceve l'oggetto ebook, o lo riceve con l'indice
    sbagliato(possibile?), cmq un aiuto è gradito....
     
    Per dovere di cronaca, nel primo caso, quello funzionante ho il controller
    con all'interno la chiamata "classica" al repo "findOneBy" e la view twig a
    cui passo $ebook ... e tutto funziona
     
    nel secondo caso ho il controller con la chiamate alla funzione custom
    "getActiveEbooks2($slug)" nel repo, e la stessa identica view a cui passo
    l'oggetto $ebook.. e non funziona e genera l'errore indicato sopra.
     
    Al verificarsi dell'errore la toolbar di symfony indica la query senza
    nessun errore (rows =1,), ed effettivamente verificandola in phpmyadmin
    funziona,
    e sparando un rozzo var_dump($ebook) nel controller dopo la chiamata al
    repo vedo i dati dell'ebook (insieme a tutto il resto)
    poi però nel template.... errore
     
    http://pastebin.com/RCtgvrbD qui ho postato il cod controller, repo, e
    view. che dire... a presto e grazie.
     
     
    PS. entità ebook è in relazione con category, nel repo ho aggiunto una
    inner join (per passare da 10 query a 1), ma non credo sia questo a
    generare l'errore

     

    leonardo proietti <leonardo...@gmail.com> Jun 17 03:01PM +0200  

    >nel secondo caso ho il controller con la chiamate alla funzione custom
    "getActiveEbooks2($slug)"
     
    che ti torna un array ;-)

     

    zero <tecla...@gmail.com> Jun 17 08:07AM -0700  

    Il giorno lunedì 17 giugno 2013 15:01:26 UTC+2, leonardo ha scritto:

     

    zero <tecla...@gmail.com> Jun 17 08:28AM -0700  

    Il bello di scrivere software per se stessi..... non avere scadenze,
    red-line, step da inseguire ecc ecc.
    Per ora ho decommentato il codice relativo al findOneBy e commentato la
    chiamata al repo e va + che bene.... poi ci ritornerò.
    Volevo avere però delle delucidazioni..... sul comportamento di symfony in
    merito al codice che ho postato.
     
    partendo da questo:
     
    public function getActiveEbooks2( $slug = null)
    {
    $qb = $this->createQueryBuilder('e');
    $qb->select(array('e','c'))
    ->innerJoin('e.category', 'c')
    ->where('e.is_actived = :active')
    ->setParameter('active', 1)
    ->andWhere('c.is_actived = :c_actived')
    ->setParameter('c_actived', 1)
    ->orderBy('e.title', 'DESC');
     
    if($slug)
    {
    $qb->andWhere('e.slug = :ebook_slug')
    ->setParameter('ebook_slug', $slug);
    }
     
    $query = $qb->getQuery();
     
    return $query->getResult();
    }
     
    Allora il la funzione del repositori è sempre la stessa il controller è 1
    solo,
    nella prima action la chiamo così:
     
    getActiveEbooks2()
     
    Senza parametri e la esegue fino all' OrderBy e sopratutto restituisce un
    oggetto che nella view userò ebook.title o ebook.slug
     
    nella seconda action chiamerò la funzione con il parametro così:
     
    getActiveEbooks2( $slug )
     
    ora la domanda è per quale motivo l'aggiunta della clausola where o meglio
    della sua esecuzione (nel primo caso viene saltata non essendoci parametro
    nella chiamata alla funzione) dovrebbe restituirmi un array e non un
    oggetto come lo decide?
     
    Ripeto sono nuovo in symfony e anche parecchio arrugginito in fatto di
    programmazione, forse mi sfugge qual'cosa..... questo comportamento è la
    norma?
     
     
     
    Il giorno lunedì 17 giugno 2013 15:19:55 UTC+2, zero ha scritto:

     

    Massimiliano Arione <gara...@gmail.com> Jun 17 08:32AM -0700  

    La risposta è semplice e avresti dovuto capirla da solo, quando Leo ha
    detto che il metodo che usi ora ti restituisce un array.
    Quello di prima, che prova a inviarti un suggerimento subliminale tramite
    il nome di "findOneBy" (ONE!), restituisce un singolo risultato.
     
    Dunque nel primo caso hai un singolo oggetto, nel secondo invece dovrai
    ciclare un array di oggetti e dentro a ogni ciclo avrai lo stesso oggetto
    di prima (che poi sia esattamente lo stesso non sono sicuro, visto la
    select che hai messo)
     
    ciao
    Massimiliano

     

    zero <tecla...@gmail.com> Jun 17 09:02AM -0700  

    Giusto, ma anche quando la uso getActiveEbooks2($slug) nella debug toolbar
    di symfony vedo row = 1 e la stessa query del debug in phpmyadmin da 1 riga
    di risultato (chiedo nella tabella ebook 1 libro in base allo slug e join
    su category in base a category_id, la tabella ha 18 righe in totale)
    solo che mi restituisce un array.
     
     
     
     
    Il giorno lunedì 17 giugno 2013 17:32:30 UTC+2, Massimiliano Arione ha
    scritto:

     

    zero <tecla...@gmail.com> Jun 17 09:41AM -0700  

    Ok... un grazie a @leonardo per la prontezza e @massimiliano per la
    concretezza effetivamente anche se la query da un risultato ci vuole sempre
    il ciclo for.
     
    Il giorno lunedì 17 giugno 2013 18:02:42 UTC+2, zero ha scritto:

     

    eux <eux...@gmail.com> Jun 17 12:56AM -0700  

    ciao Simone,
     
    > Ogni feature viene eseguita in sequenza e c'è quindi "memoria" degli
    scenari precedenti. A questo punto voglio essere
    > certo di conoscere l'id dei record appena creati.
     
    questa frase mi fa sospettare che oltre a quanto hanno detto gli altri ci
    sono un paio di problemi pratici nella scrittura dei test.
     
    Non dovresti mai fare affidamento sulle ID dei record. Dovresti fare delle
    query significative sui campi per controllare o tirare fuori i record che
    ti servono. In questo modo per riportare il database ad uno stato di
    riutilizzabilità puoi ricaricare solo le fixtures.
     
    Inoltre un test deve sempre lasciare il sistema nello stato in cui lo ha
    trovato. Puoi usare gli hook di behat per far sì che alla fine del test il
    sistema venga ripristinato.

     

    Simone Gentili <senso...@gmail.com> Jun 17 10:43AM +0200  


    > questa frase mi fa sospettare che oltre a quanto hanno detto gli altri ci
    > sono un paio di problemi pratici nella scrittura dei test.
     
    Oddio, io faccio si che una feature abbia tutta una sua storia. Quindi
    faccio affidamento all'ordine degli scenari che scrivo. Potrei anche fare a
    meno degli id (che avrebbe molto senso). In ambito "Behat", e riguardo al
    fatto di lasciare il sistema nello stato in cui lo si trova ...
     
    Tu con test intendi "ciascun scenario"?
     
    Se la risposta è si siamo allo stesso punto di prima: sto proprio lavorando
    male.

     

Hai ricevuto questo messaggio perché sei iscritto al gruppo Google symfony-it.
Puoi inviare post tramite email.
Per annullare l'iscrizione a questo gruppo, invia un messaggio vuoto.
Per ulteriori opzioni, visita questo gruppo.

--
Hai ricevuto questo messaggio perché sei iscritto al gruppo "symfony-it" di Google Gruppi.
Visita questo gruppo all'indirizzo http://groups.google.com/group/symfony-it.
 
 



--
Eugenio Pombi
Developer

tel:      +39.329.5455797
mail:    eux...@gmail.com
twitter: @euxpom
skype: euxeux

it.linkedin.com/pub/eugenio-pombi/3b/28b/99a

Reply all
Reply to author
Forward
0 new messages