2012-06-30 96 views
3

In the PHPUnit docs,它說,它可能得到的代碼覆蓋率數據:PHPUnit_Selenium代碼覆蓋率是否工作?

  1. 複製的PHPUnit /擴展/ SeleniumTestCase/phpunit_coverage.php:

    PHPUnit_Extensions_SeleniumTestCase的可以收集代碼覆蓋率信息通過測試運行硒進入您的網絡服務器的文檔根目錄。

  2. 在你的web服務器的php.ini配置文件,配置的PHPUnit /擴展/ SeleniumTestCase/prepend.php和PHPUnit的/擴展/ SeleniumTestCase/append.php分別中的auto_prepend_file和auto_append_file所。

  3. 在你的測試用例類,它擴展了PHPUnit_Extensions_SeleniumTestCase,使用 保護$ coverageScriptUrl = 'HTTP://host/phpunit_coverage.php'; 配置phpunit_coverage.php腳本的URL。

我一直沒能得到這個輸出的任何覆蓋信息。我可以通過正常的單元測試獲得代碼覆蓋率信息。

對於在http://localhost/ts2_templates/運行我的應用程序,我複製到phpunit_coverage.phphttp://localhost/phpunit_coverage.php

我已經添加了以下爲php.ini:

auto_prepend_file = "/path/to/pear/share/pear/PHPUnit/Extensions/SeleniumTestCase/prepend.php" 
auto_append_file = "/path/to/pear/share/pear/PHPUnit/Extensions/SeleniumTestCase/append.php" 

...並覈實他們被稱爲用die("yep it's me");

最後,我增加了以下我的測試用例:

<?php 

class WebTest extends PHPUnit_Extensions_Selenium2TestCase 
{ 
    # added line below 
    protected $coverageScriptUrl = 'http://localhost/phpunit_coverage.php'; 

    protected function setUp() 
    { 
     $this->setBrowser('firefox'); 
     $this->setBrowserUrl('http://localhost/ts2_templates'); 
    } 

    public function testTitle() 
    { 
     $this->url('http://localhost/ts2_templates'); 
     $this->assertContains('test', $this->title()); 
    } 
} 

?> 

下面是運行的代碼覆蓋測試命令,通過PHPStorm產生:

/Applications/MAMP/bin/php5.3/bin/php -dxdebug.coverage_enable=1 /private/var/folders/pp/0t4y41f95j5313qm_f8b42fw0000gn/T/ide-phpunit.php --coverage-clover /path/to/coverage/ts2_templates$WebTest.coverage --no-configuration WebTest /Users/Ian/php/ts2_templates/tests/WebTest.php

繼承人的輸出覆蓋XML文件:

<?xml version="1.0" encoding="UTF-8"?> 
<coverage generated="1341015508"> 
    <project timestamp="1341015508"> 
     <metrics files="0" loc="0" ncloc="0" classes="0" methods="0" coveredmethods="0" conditionals="0" coveredconditionals="0" statements="0" coveredstatements="0" elements="0" coveredelements="0"/> 
    </project> 
</coverage> 

T他測試自己通過。

我已經驗證有沒有退出或代碼的任何地方死語句。

任何想法?

回答

1

這絕對是工作。根據文檔,我已經在symfony中設置了測試覆蓋率的硒測試。

我最大的問題是,將覆蓋數據有錯誤路徑文件在裏面,因此不能對準覆蓋數據來源。這是因爲我執行的測試,從不同的地方,因爲服務器保留在文件中。因此,我調整了append.php的路徑改寫到我的源文件的地方。

1

我也有一些問題,把事情的工作。以下由塞繆爾戈爾德斯坦post in the YII forum幫助我:

我最終將prepend.php和append.php移動到我的項目的文檔根。

我還發現臨時文件的位置有所不同 - 我原本試圖將它們保存到/tmp/並且PHP默默無聞。當我將$GLOBALS['PHPUNIT_COVERAGE_DATA_DIRECTORY']更改爲myroot/protected/runtime/tmp並在該目錄上執行chmod 777時,它開始工作。

有一件事可能會讓你感到沮喪的是,通過Ajax運行的代碼不會被標記爲被覆蓋。

這似乎是Selenium已知的問題。谷歌「github sebastianbergmann phpunit硒問題」和追蹤closed issue #22欲瞭解更多信息。