2013-03-15 13 views
9

L'app My Yii ottiene copertura phpunit in controller, modelli, componenti, moduli ma non in visualizzazioni. Il problema è che il caricatore di copertura del codice in phpunit include il file di visualizzazione durante la preparazione di un report di copertura. Le viste con i moduli hanno chiamate $this->beginWidget che causano un arresto anomalo poiché non c'è $ in questo contesto.test phpunit con viste in copertura

Le visualizzazioni non hanno davvero codice o logica importanti, ma hanno ancora alcune condizioni e persino dei loop per chiamare renderPartial, quindi sarebbe meglio avere anche un codice di visualizzazione coperto.

Esiste una soluzione a questo problema?

+0

Ottima domanda! Vorrei che fosse stata posta maggiore enfasi sui test unitari e funzionali nelle guide e nei libri del framework piuttosto che sulla funzionalità standard standard che è possibile apprendere in 10 minuti. – AndrewPK

risposta

4

Hai provato a estendere CWebTestCase? Generalmente durante la scrittura di unit test, hai fixture e cose per fornire i dati necessari - ma con test su viste e test "funzionali", per le web-app, è generalmente più semplice imitare un browser e farlo eseguire sull'app Web come se un utente lo stava effettivamente utilizzando. Attualmente, questa mimica è più facile con il selenio (a mio parere).

La Guida Yii su Functional Testing è un buon punto di partenza, nonché Selenium Documentation. C'è anche lo this book che usa il selenio (non sono sicuro che la nuova edizione lo faccia, ma conosco la versione precedente con Data di pubblicazione: l'11 agosto 2010) e lo Yii Book di Larry Ullman avrà capitoli sul test e l'uso di Il selenio nei test funzionali quando ha completato quel capitolo.

Spero che questo aiuti!

Update per spiegare ulteriormente CWebTestCase

CWebTestCase estende PHPUnit_Extensions_SeleniumTestCase che implementa direttamente una fondazione collaudo funzionale che è possibile utilizzare all'interno phpunit al fine di testare vista, la creazione di widget di prova all'interno di punti di vista, affermare che il testo esiste, ' fare clic su "sui collegamenti, ecc. Questi test vengono comunque eseguiti dalla riga di comando anche se richiedono che il server Selenium-RC venga avviato al momento dell'esecuzione del test e richiedono la configurazione di un browser valido. Un browser valido può essere configurato con il minimo codice come il seguente posto all'interno della funzione setUp():

$this->setBrowser('*firefox /usr/lib/firefox/firefox-bin'); 

Affermare che la copertura codice non può essere fornita da CWebTestCase non è vero, come CWebTestCase estende PHPUnit_Extensions_SeleniumTestCase, che prevede quanto segue come citato da the documentation:

PHPUnit_Extensions_SeleniumTestCase in grado di raccogliere la copertura del codice informazioni per le prove eseguite attraverso Selenio:

Copia PHPUnit/Extensions/SeleniumTestCase/phpunit_coverage.php nella directory root dei documenti del tuo server web . Nel file di configurazione php.ini del vostro server web, configurare

PHPUnit/Extensions/SeleniumTestCase/prepend.php e PHPUnit/Extensions/SeleniumTestCase/append.php

come auto_prepend_file e auto_append_file, rispettivamente.Nel tuo test caso classe che estende PHPUnit_Extensions_SeleniumTestCase, utilizzare

protected $coverageScriptUrl = 'http://host/phpunit_coverage.php';

per configurare l'URL per lo script phpunit_coverage.php.

+0

La mia verifica è basata su modelli di controllo basati su console e su azioni e persino su richiami di Xpath sull'output html. Il rapporto sulla copertura del codice sulle viste fatte da phpunit è il problema. Anche il selenio non coprirà le linee del php nelle viste. – thevikas

+0

Per favore, vedi la risposta aggiornata qui sotto - Credo che CWebTestCase fornisca esattamente ciò che stai cercando grazie all'estensione di 'PHPUnit_Extensions_SeleniumTestCase'. In caso contrario, non capisco abbastanza la tua domanda e mi dispiace di non poter essere più di aiuto. – AndrewPK

Problemi correlati