yii phpunit测试覆盖范围内的视图

the*_*kas 10 php phpunit unit-testing code-coverage yii

我的Yii应用程序在控制器,模型,组件,模块中获得phpunit覆盖,但没有任何视图.问题是phpunit中的代码覆盖率加载器在准备覆盖率报告期间包含视图文件.具有表单的视图具有$this->beginWidget导致崩溃的调用,因为没有$ this上下文.

视图实际上没有重要的代码或逻辑,但它们仍然有一些条件甚至循环调用,renderPartial因此最好也可以获得视图代码.

有这个问题的解决方案吗?

And*_*wPK 4

您是否尝试过扩展CWebTestCase?一般来说,在编写单元测试时,您有固定装置和东西来提供必要的数据 - 但是通过视图测试和“功能”测试,对于 Web 应用程序,通常最容易模仿浏览器并让它在 Web 应用程序上执行操作,如下所示如果用户确实在使用它。目前,这种模仿最容易用 Selenium 来完成(在我看来)。

Yii功能测试指南以及Selenium 文档是一个很好的起点。还有一本使用 selenium 的书(我不确定最新版本是否使用了 selenium,但我知道出版日期为:2010 年 8 月 11 日的先前版本),Larry Ullman 的Yii Book将有关于测试和当他完成该章时,他会在功能测试中使用 Selenium。

希望这可以帮助!

更新以进一步解释CWebTestCase

CWebTestCase 扩展了PHPUnit_Extensions_SeleniumTestCase,它直接实现了一个功能测试基础,您可以在 phpunit 中使用它来测试视图、测试视图内的小部件创建、断言文本存在、“单击”链接等。这些测试仍然从命令运行尽管它们要求在运行测试时启动 Selenium-RC 服务器,并且需要配置有效的浏览器。一个有效的浏览器可以使用函数内的如下代码来配置setUp()

$this->setBrowser('*firefox /usr/lib/firefox/firefox-bin');
Run Code Online (Sandbox Code Playgroud)

说 CWebTestCase 无法提供代码覆盖率是不正确的,因为 CWebTestCase 扩展了 PHPUnit_Extensions_SeleniumTestCase,它提供了文档中引用的以下内容:

PHPUnit_Extensions_SeleniumTestCase 可以收集通过 Selenium 运行的测试的代码覆盖率信息:

复制PHPUnit/Extensions/SeleniumTestCase/phpunit_coverage.php到您的网络服务器的文档根目录中。在您的网络服务器的 php.ini 配置文件中,配置

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

分别为auto_prepend_fileauto_append_file。在扩展的测试用例类中PHPUnit_Extensions_SeleniumTestCase,使用

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

配置phpunit_coverage.php脚本的 URL。