我们使用Codeigniter并有两个选项来调用我们的API控制器:
这对于我们网站的功能来说是非常好的。但是,当我运行PHPUnit时,控制器的覆盖率报告是空白的,而所有模型的覆盖率报告都是正确的。
在跟踪xdebug如何创建报表时,使用基于Curl的客户端或CLI客户端似乎在测试函数的作用域之外被调用,因此xdebug_get_code_coverage()不跟踪执行的控制器代码。
在这种情况下,是否可以将xdebug配置为识别代码覆盖率?是否可以在PHPUnit测试函数的范围内调用Codeigniter控制器?还有其他可能的解决办法吗?
发布于 2011-04-30 11:55:48
是的,这很容易实现。有关它的更多信息,请参见http://www.phpunit.de/manual/current/en/selenium.html。
基本上,您可以在您的web根目录中放置一些特殊文件:
PHPUnit_Extensions_SeleniumTestCase可以为通过Selenium:将
PHPUnit/Extensions/SeleniumTestCase/phpunit_coverage.php复制到can服务器的文档根目录中的测试收集代码覆盖率信息。在the服务器的php.ini配置文件中,分别将PHPUnit/Extensions/SeleniumTestCase/prepend.php和PHPUnit/Extensions/SeleniumTestCase/append.php配置为auto_prepend_file和auto_append_file。在扩展PHPUnit_Extensions_SeleniumTestCase的测试用例类中,使用受保护的$coverageScriptUrl = 'Coverage.php的;为phpunit_coverage.php脚本配置URL。
当运行带有GET参数PHPUNIT_SELENIUM_TEST_ID的URL时,覆盖信息将被跟踪,PHPUnit可以通过请求coverageScriptUrl来收集它。
发布于 2011-03-26 18:30:36
另一种选择:请参阅我们的SD PHP测试覆盖率工具。
它不使用xdebug来收集覆盖数据,因此不会出现xdebug的特定问题。它测试一个脚本来收集测试覆盖率数据;一旦被检测,无论如何执行该脚本,您都将得到测试覆盖率数据。(检测是临时的;一旦收集到测试覆盖率数据,就会丢弃已检测的代码,因此不会影响生产代码库)。这种方法确实要求您显式列出需要覆盖数据的所有PHP脚本;如果需要,可以忽略一些脚本。通常情况下,这是不值得的;大多数用户只需列出所有PHP脚本。
https://stackoverflow.com/questions/5438453
复制相似问题