2016-11-11 11 views
1

我有我認爲是一個不常見的問題,但我會嘗試儘可能清楚地解釋。我創建了一個簡單的命令工匠做這個從Artisan命令調用PHPUnit將忽略XML文件

/** 
* Execute the console command. 
*/ 
public function handle() 
{ 
    $this->info("==> Cleaning up reports and docs..."); 

    $command = new Process("rm -f tests/docs/* && rm -rf test/reports/*"); 
    $command->run(); 

    $this->warn("==> Reports and docs are clean"); 

    $this->info("==> Executing Tests Suite..."); 
    $command = new Process("vendor/bin/phpunit --coverage-html tests/reports --testdox-html tests/docs/reports.html -v --debug"); 
    $command->run(); 
    $this->info($command->getIncrementalOutput()); 

    $this->warn("==> report generated >> test/reports. Documentation generated >> test/docs/reports.html"); 
} 

這可能看起來有點怪,但它實際上是非常有用的,它的覆蓋範圍的支持和其他的東西推出PHPUnit的。問題是,如果我運行這個命令,如php artisan ludo237:full-test它將完全忽略phpunit.xml實際上它會顯示和錯誤說MySQL數據庫不存在,即使我已經在我的phpunit.xml內設置了sqlite連接來說明你可以清楚地看到這是正確的:

<?xml version="1.0" encoding="UTF-8"?> 
<phpunit backupGlobals="false" 
     backupStaticAttributes="false" 
     bootstrap="bootstrap/autoload.php" 
     colors="true" 
     convertErrorsToExceptions="true" 
     convertNoticesToExceptions="true" 
     convertWarningsToExceptions="true" 
     processIsolation="false" 
     stopOnFailure="false"> 
    <testsuites> 
     <testsuite name="Application Test Suite"> 
      <directory suffix="Test.php">./tests</directory> 
     </testsuite> 
    </testsuites> 
    <filter> 
     <whitelist processUncoveredFilesFromWhitelist="true"> 
      <directory suffix=".php">./app</directory> 
     </whitelist> 
    </filter> 
    <php> 
     <env name="APP_ENV" value="testing"/> 
     <env name="APP_DEBUG" value="true"/> 
     <env name="APP_URL" value="http://localhost:8000"/> 
     <env name="DB_CONNECTION" value="sqlite"/> 
     <env name="DB_DATABASE" value=":memory:" /> 
     <env name="CACHE_DRIVER" value="array"/> 
     <env name="SESSION_DRIVER" value="array"/> 
     <env name="QUEUE_DRIVER" value="sync"/> 
     <env name="MAIL_DRIVER" value="log"/> 
     <env name="MAIL_PRETEND" value="true"/> 
    </php> 
</phpunit> 

我知道,我可以簡單地創建該命令行bash的別名,實際上這是我目前的熱修復,但在這一點上,我只是好奇,想了解爲什麼當我從artisan命令啓動phpunit命令,忽略了XML文件。

有沒有人有這方面的線索?謝謝!

回答

1

調試這件事花了我很多,但最終我發現它爲什麼不起作用。首先,請讓我澄清一點,即使您的代碼沒有問題,即使Process類沒有任何問題,即使使用本機exec函數,您也會得到相同的行爲。

二,phpunit.xml文件完全被讀取,根本沒有問題。

表示真正的問題在於PHPUnit不允許您重新定義(或覆蓋)任何env變量,因爲there is a check that prevents that

這是因爲Laravel不解析phpunit.xml文件本身,而在那一刻你調用它,它已經爲時已晚,the environment variables are defined,或者通過putenv$_SERVER和/或$_ENV

因此,I created an Issue on PHPUnit,即使在最新版本(截至今天),這個問題仍然存在,即使這was already asked in the past

不幸的是我沒有辦法還你,但讓我們越過我們的手指,讓我們等待PHPUnit的增加所提出的force屬性:)

最好的問候, 朱利安

+1

謝謝for.your的努力,讓我們看看問題是否會有更新 –