2016-11-11 10 views
1

私は珍しい問題だと思っていますが、私はできる限り明確に説明しようとします。私はちょっと奇妙に思えるが、それは実際にはかなり便利です、それはカバレッジのサポートや他のものとはPHPUnitを起動この本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"); 
} 

をできない、単純な職人のコマンドを作成しました。問題は、このコマンドをphp artisan ludo237:full-testのように実行すると、実際にはphpunit.xmlが無視され、MySQLデータベースが存在しないというエラーが表示されますが、phpunit.xmlの中でsqlite接続を設定しても問題ありません明らかにそれが正しいことを参照してください。私は単にそのコマンドラインのbashのエイリアスを作成することができることを知って

<?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> 

は、実際にはこれが私の現在のホットフィックスですが、この時点で私はなぜ際に理解することは、単に好奇心が強いですartisanコマンドからphpunitコマンドを起動し、XMLファイルを無視します。

誰かがこれについて手掛かりを持っていますか?ありがとうございました!

答えて

1

これをデバッグするのに本当に多くの時間がかかりましたが、最終的にはなぜ動作しないのかがわかりました。

まず、Processクラスで何も問題がない場合でも、コードに間違いがないことを明確にしてください。ネイティブexec機能を使用しても同じ動作が得られます。

第2に、phpunit.xmlファイルが完全に読み込まれているため、まったく問題はありません。

実際の問題は、there is a check that prevents thatなので、env変数を再定義(または上書き)できないPHPUnitにあります。

これはLaravelはphpunit.xmlファイル自体を解析していない、と瞬間にあなたがそれを呼んでいるので、それは既に手遅れだし、the environment variables are defined、どちらかputenv$_SERVERおよび/または$_ENV経由。

これはであっても、最新のバージョン(本日時点)であってもこの問題が解決されているI created an Issue on PHPUnitです。

残念ながら、私はあなたのためにまだ解決策を持っていませんが、私たちの指を渡り、PHPUnitの提案force属性を追加するために待ちましょうしましょう:)

敬具を、 ジュリアン

+1

はfor.yourエフォートみましょうありがとう問題が更新されるかどうかを確認する –

関連する問題