在laravel 5中配置测试环境的最佳方法是什么?

时间:2015-05-24 09:11:53

标签: php laravel

我刚刚接触过Laravel5,之前有过L4的经验。我遇到的一个问题是环境配置,主要是测试。

我试图连接到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文件,&#39;测试&#39;和&#39; local&#39;,将它们重命名为&#39; .env&#39;因为我需要它们。这显然不是有效的或可以容忍的。有什么建议吗?

2 个答案:

答案 0 :(得分:0)

我能够在database.php配置中设置一个不同的数据库连接来设置一个env环境变量:

配置/ database.php中

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

phpunit.xml

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

答案 1 :(得分: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') );
       }
   });

在指定环境下运行一些命令:

APP_ENV=testing artisan serve

然后app会从/.env.testing

加载配置

请注意:

  

如果你接受我的想法, - env选项无效。另一种方法是添加前缀APP_ENV = testing。我认为这是一个laravel的错误,因为在cli模式下运行命令时不会调用DetectEnvironment Closure。