yii phpunit testen mit Ansichten in Abdeckung

9

Meine Yii-App wird in Controller, Modellen, Komponenten, Modulen, aber nicht in Ansichten verwendet. Das Problem besteht darin, dass der Code Coverage Loader in phpunit die View-Datei während der Erstellung eines Coverage-Berichts enthält. Ansichten mit Formularen haben Aufrufe $this->beginWidget , was zu einem Absturz führt, da es keinen $ Kontext gibt.

Ansichten haben nicht wirklich wichtigen Code oder Logik, aber sie haben noch einige Bedingungen und sogar Schleifen, um renderPartial aufzurufen, so dass es gut wäre, einen Ansichtscode zu erhalten, der ebenfalls abgedeckt ist.

Gibt es eine Lösung für dieses Problem?

    
thevikas 15.03.2013, 12:05
quelle

1 Antwort

4

Haben Sie versucht, CWebTestCase zu erweitern? Im Allgemeinen haben Sie beim Schreiben von Komponententests Geräte und Dinge, um die notwendigen Daten bereitzustellen - aber mit Tests auf Ansichten und "funktionalen" Tests ist es für Web-Apps im Allgemeinen am einfachsten, einen Browser nachzuahmen und Aktionen in der Web-App durchzuführen wenn ein Benutzer es tatsächlich benutzt hat. Gegenwärtig wird dieses Nachahmen am einfachsten mit Selenium durchgeführt (meiner Meinung nach).

Der Yii Guide zu Functional Testing ist ein guter Startpunkt die Selenium-Dokumentation . Es gibt auch ein Buch , das mit Selen übergeht (ich bin nicht sicher, ob die neueste Ausgabe das tut, aber ich weiß die vorherige Veröffentlichung mit Veröffentlichungsdatum: 11. August 2010 tat), und Larry Ullmans Yii Buch wird Kapitel über das Testen und die Verwendung von Selen in Funktionstests, wenn er dieses Kapitel abgeschlossen hat.

Hoffe, das hilft!

Aktualisieren, um CWebTestCase

weiter zu erläutern

CWebTestCase erweitert PHPUnit_Extensions_SeleniumTestCase , das direkt eine funktionale Testgrundlage implementiert, die Sie innerhalb von phpunit verwenden können um Ansichten zu testen, Widget-Erstellung innerhalb von Ansichten zu testen, zu bestätigen, dass Text existiert, auf Links klicken usw. Diese Tests werden immer noch von der Befehlszeile ausgeführt, obwohl sie erfordern, dass der Selenium-RC-Server gestartet wird Sie benötigen einen gültigen Browser, der konfiguriert wird. Ein gültiger Browser kann mit so wenig Code wie der folgende innerhalb der Funktion setUp() konfiguriert werden:

%Vor%

Die Angabe, dass Code Coverage nicht von CWebTestCase bereitgestellt werden kann, ist nicht wahr, da CWebTestCase PHPUnit_Extensions_SeleniumTestCase erweitert, das Folgendes bietet, wie von die Dokumentation :

  

PHPUnit_Extensions_SeleniumTestCase kann Code Coverage sammeln   Informationen für Tests laufen durch Selenium:

     

Kopiere PHPUnit/Extensions/SeleniumTestCase/phpunit_coverage.php in   Das Root-Verzeichnis Ihres Webservers. In der php.ini deines Webservers   Konfigurationsdatei, konfigurieren Sie

     

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

     

als auto_prepend_file bzw. auto_append_file . In deinem Test   Fallklasse, die PHPUnit_Extensions_SeleniumTestCase erweitert, verwenden Sie

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

  

zum Konfigurieren der URL für das Skript phpunit_coverage.php .

    
AndrewPK 25.03.2013 18:12
quelle