2015-05-24 66 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.

相关问题