2015-05-24 71 views
3

我剛剛與Laravel5握手,有一些以前的L4經驗。我遇到的其中一個問題是環境配置,主要是關於測試。在laravel 5中配置測試環境的最佳方式是什麼?

我想經過一番摸索連接到數據庫mysqlite &,最好的我想出來的是增加一個條件到配置文件,如下所示:

'default' => $app->environment('testing') ? 'sqlite':'mysql' 

在我的PHPUnit .xml文件:

<php> 
     <env name="APP_ENV" value="testing"/> 
     <env name="CACHE_DRIVER" value="array"/> 
     <env name="SESSION_DRIVER" value="array"/> 
     <env name="QUEUE_DRIVER" value="sync"/> 
</php> 

但是,現在當我嘗試運行我的測試套件我收到以下錯誤:

ReflectionException: Class env does not exist. 

在這一點上,我唯一的選擇似乎是創建兩個單獨的.env文件,'測試'和'本地',將它們重命名爲'.env',因爲我需要它們。這顯然不是有效的或可以容忍的。有什麼建議?

+0

是你phpunit.xml文件類似於原始:

APP_ENV=testing artisan serve 

然後應用程序會從/.env.testing

筆記加載配置一個? https://github.com/laravel/laravel/blob/master/phpunit.xml –

+0

這是非常相同的,是的。 「測試套件」節點中的唯一更改。 –

+0

你之前運行過'composer install'嗎? –

回答

0

我能夠設置不同的數據庫連接設置在database.php中配置的ENV環境變量:

配置/ database.php中

- 'default' => 'mysql', 
+ 'default' => env('DB_CONNECTION','mysql'), 

phpunit.xml

<env name="DB_CONNECTION" value="sqlite"/> 
0

正如文檔所示,當您運行phpunit時,默認APP_ENV爲testing,並在phpunit.xmlhttp://laravel.com/docs/testing#introduction)中設置。但流明沒有任何規則爲我們加載配置文件,如.env.testing.env.production

但是,laravel爲我們提供了callback

$app->detectEnvironment(function() use ($app){ 
     if (file_exists(__DIR__.'/../'.'.env.' .getenv('APP_ENV'))) { 
      $app->loadEnvironmentFrom('.env.'. getenv('APP_ENV')); 
     } 
    }); 

運行一些命令在指定環境:

if you take my idea, --env option is invalid. the another approach is adding prefix APP_ENV=testing. i think it is a bug of laravel , because the DetectEnvironment Closure will not be call when running command under cli mode.

相關問題