什么';这是在laravel 5中配置测试环境的最佳方式


What's the best way to configure a testing environment in laravel 5?

我刚刚掌握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文件,"testing"answers"local",根据需要将它们重命名为".env"。这显然不是有效的,也不是可以容忍的。有什么建议吗?

我能够设置不同的数据库连接,在数据库中设置env环境变量。php config:

config/database.php

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

phpunit.xml

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

如文档所示,当您运行phpunit时,默认的APP_ENV是testing,并在phpunit.xml中设置(http://laravel.com/docs/testing#introduction)。但lumen没有任何规则为我们加载配置文件,如.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

则应用程序将从/.env.testing 加载配置

注:

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