2017-10-07 3 views
1

Laravel v5.5.14
のPHPUnitのv6.4.1Laravelテスト - 移行/さわやか間違っ環境

私は機能テストの数とLaravelアプリケーションを持っています。私のベースTestCaseは、の特性を使用して各テストの前にDBリフレッシュをトリガーし、phpunit.xmlのenv変数はそうです。

<php> 
    <env name="APP_ENV" value="testing"/> 
    <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"/> 
</php> 

単独の開発mysql DB接続のままにしてメモリにsqliteのを使用してテストを実行することを意図。これらの設定(およびキャッシュされた設定の消去など)にもかかわらず、DBリフレッシュでは接続データベースmysqlが常にリフレッシュされます。

RefreshDatabaseの機能を調べて、refreshDatabaseの方法をデバッグしました。

$this->usingInMemoryDatabase() 
         ? $this->refreshInMemoryDatabase() 
         : $this->refreshTestDatabase(); 

usingInMemoryDatabaseは常にfalseを返します。そのメソッドの内容を見ると、をconfigから検索すると、上記のenv変数で上書きされるはずですが、常にmysqlが返されます。

ここでは何が起こっていますか?

+0

phpunir.xmlはたぶん設定がキャッシュされているプロジェクトを選択? '/ bootstrap/cache/config.php'があれば削除してください。 –

+0

このデータベースを '.env'ファイルに設定するとどうなりますか?おそらく 'phpunit.xml'の設定は使われていませんか?このテストを手動で実行しているのですか、JenkinsなどのCI経由で実行していますか? –

+0

これはおそらく、あなたのシェル環境に 'DB_CONNECTION'が設定されているためです。 PHPUnitはデフォルトでこれらの変数をオーバーライドしませんが、強制的にオーバーライドすることができます。https://stackoverflow.com/a/43717277/4233593 –

答えて

0

キャッシュをクリアするためのテストを実行する前に、コンフィグ変数が間違った環境からキャッシュされていないことを確認してから実行してください。これはあなたのIDE(例えばPHPStorm)を使用して実行PHPUnitのを助け、特にしていない場合

enter image description here

関連する問題