10

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

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

这个问题有解决方案吗?

4

1 回答 1

4

您是否尝试过扩展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.phpPHPUnit/Extensions/SeleniumTestCase/append.php

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

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

phpunit_coverage.php配置脚本的 URL 。

于 2013-03-25T18:12:53.940 回答