我的 Yii 应用程序在控制器、模型、组件、模块中获得了 phpunit 覆盖,但没有任何视图。问题是 phpunit 中的代码覆盖率加载器在准备覆盖率报告期间包含视图文件。带有表单的视图调用$this->beginWidget
会导致崩溃,因为没有 $this 上下文。
视图实际上并没有重要的代码或逻辑,但它们仍然有一些条件甚至循环要调用renderPartial
,因此最好也覆盖视图代码。
这个问题有解决方案吗?
我的 Yii 应用程序在控制器、模型、组件、模块中获得了 phpunit 覆盖,但没有任何视图。问题是 phpunit 中的代码覆盖率加载器在准备覆盖率报告期间包含视图文件。带有表单的视图调用$this->beginWidget
会导致崩溃,因为没有 $this 上下文。
视图实际上并没有重要的代码或逻辑,但它们仍然有一些条件甚至循环要调用renderPartial
,因此最好也覆盖视图代码。
这个问题有解决方案吗?
您是否尝试过扩展CWebTestCase?通常,在编写单元测试时,您有提供必要数据的装置和东西 - 但是对于 Web 应用程序的视图测试和“功能”测试,通常最容易模仿浏览器并让它在 Web 应用程序上执行操作如果用户实际使用它。目前,这种模仿最容易用 Selenium 完成(在我看来)。
Yii功能测试指南和Selenium 文档是一个很好的起点。还有这本书使用了 selenium(我不确定最新版本是否有,但我知道上一版本的出版日期:2010 年 8 月 11 日有),Larry Ullman 的Yii 书将有关于测试和当他完成那一章时,在功能测试中使用 Selenium。
希望这可以帮助!
更新以进一步解释CWebTestCase
CWebTestCase 扩展了PHPUnit_Extensions_SeleniumTestCase,它直接实现了一个功能测试基础,您可以在 phpunit 中使用它来测试视图、测试视图内的小部件创建、断言文本存在、“单击”链接等。这些测试仍然从命令运行虽然他们要求在运行测试时启动 Selenium-RC 服务器并且他们需要配置有效的浏览器。一个有效的浏览器可以用尽可能少的代码来配置,就像setUp()
函数内部的以下代码一样:
$this->setBrowser('*firefox /usr/lib/firefox/firefox-bin');
声明 CWebTestCase 不能提供代码覆盖率是不正确的,因为 CWebTestCase 扩展了 PHPUnit_Extensions_SeleniumTestCase,它提供了文档中引用的以下内容:
PHPUnit_Extensions_SeleniumTestCase 可以为通过 Selenium 运行的测试收集代码覆盖率信息:
复制
PHPUnit/Extensions/SeleniumTestCase/phpunit_coverage.php
到您的网络服务器的文档根目录。在您的网络服务器的 php.ini 配置文件中,配置
PHPUnit/Extensions/SeleniumTestCase/prepend.php
和PHPUnit/Extensions/SeleniumTestCase/append.php
分别为
auto_prepend_file
和auto_append_file
。在扩展的测试用例类中PHPUnit_Extensions_SeleniumTestCase
,使用
protected $coverageScriptUrl = 'http://host/phpunit_coverage.php';
phpunit_coverage.php
配置脚本的 URL 。