Sto sviluppando un prodotto corredato da una serie di test, per lo più funzionali ovvero doctest, che mi permettano di tenere sotto controllo differenti parti dell applicativo qualora vengono aggiunte nuove funzionalità.
Tra i vari test, è presente un doctest che verifica il funzionamento di una pagina di ricerca; l'utente, compilando una semplice form, può ricercare dei libri all'interno di un particolare catalogo.
Questo è il test in breve:
...
Apro la pagina della ricerca
>>> browser.open('%s/search' % portal_url)
Compilo la form inserendo del testo da riscercare e clicco su cerca
>>> browser.getControl(label='Search text').value = 'Sun tzu'
>>> browser.getControl(name='search_form.buttons.search').click()
Questa ricerca mi deve restituire un libro (L'arte della guerra di Sun-tzu)
>>> 'Trovato 1 libro' in browser.contents
True
...
Fino a ieri tutto funzionava per il meglio ma oggi, sebbene non abbia fatto particolari modifiche, il test non funziona più. Un errore arcano, legato alla libreria ClientForm, utilizzata dal modulo testbrowser per il parsing delle form web, è l'unico risultato che riesco ottenere dal test.
ParseError: OPTION outside of SELECT
Cerco sul web qualche riferimento all'errore ma l'unica cosa che trovo è un messaggio su una mailing-list che mi dice che un errore simile puzza di baco.
Eppure fino a ieri funzionava; ripenso a quanto ho modificato nelle ultime ore; ho inserito un po' di javascript ma dovrebbe essere trasparente ai miei doctest ovvero non dovrebbe nemmeno essere eseguito.
In verità il problema è proprio in quel punto:
- Plone utilizza XHTML 1.0 Transitional come header per e sue pagine
- Quando inseriamo javascript dobbiamo quindi inserirlo correttamente come da specifiche XHTML
- I browser sono di bocca buona rispetto a ClientForm
Vado quindi a modificare il mio template, dove inserisco il javascript in maniera corretta:
...
<metal:js fill-slot="javascript_head_slot">
<script type="text/javascript">
//<![CDATA[
... qui ci metto tutto il javascript che voglio ...
//]]>
</script>
</metal:js>
...
il mio test torna a funzionare, come per magia.
- Archive
- 2009 2010 2011 2012