Php Laravel 5应用程序始终使用';测试';环境配置

Php Laravel 5应用程序始终使用';测试';环境配置,php,laravel,laravel-5,phpunit,environment,Php,Laravel,Laravel 5,Phpunit,Environment,我有一个Laravel 5应用程序,有两个环境和两种配置:测试(用于PHPUnit配置,内存数据库)和本地(我的开发配置) 即使将环境配置为local,应用程序也只在resources/config/testing文件夹中加载配置。我可以从app_ENV环境变量中看到同一应用程序中的环境,它是local 我是否应该不使用测试配置目录来配置测试 在Laravel 5中配置测试环境的更好方法是什么 Laravel 5不再正确级联配置文件,因此测试配置文件将覆盖本地配置文件中的任何内容 现在,不应该

我有一个Laravel 5应用程序,有两个环境和两种配置:测试(用于PHPUnit配置,内存数据库)和本地(我的开发配置)

即使将环境配置为
local
,应用程序也只在
resources/config/testing
文件夹中加载配置。我可以从
app_ENV
环境变量中看到同一应用程序中的环境,它是
local

  • 我是否应该不使用测试配置目录来配置测试

  • 在Laravel 5中配置测试环境的更好方法是什么


Laravel 5不再正确级联配置文件,因此测试配置文件将覆盖本地配置文件中的任何内容

现在,不应该为每个环境设置任何子文件夹,而是在根文件夹的.env文件中设置配置设置

此文件未签入回购协议,以确保未将任何敏感内容签入回购协议。对于应用程序所在的每个环境,都应该有一个单独的.env文件

测试

对于php单元(函数),您可以在phpunit.xml文件中设置env变量,例如

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

对于behat(验收)测试,Laracasts Laravel behat扩展允许您创建.env.behat文件以更改环境变量

对于phpspec(单元)测试,环境不应该是重要的,因为您单独测试单个方法,并模拟其他一切


对于selenium(integration/system/e2e)测试,无论您在哪里进行测试,环境变量都应该来自服务器上的.env文件

在sqlite上运行测试时,我必须使用的其他要点,而主应用程序通常默认为mysql:

在phpunit.xml中添加类似的内容,如craig.michael.morris所解释:

<env name="DB_DRIVER" value="sqlite"/>
在config/database.php的'sqlite'部分

'default' => env('DB_DRIVER', 'mysql'),
'database' => ':memory:',
1) 打开配置文件
database.php
,并在
'connections'=>[

'sqlite_testing' => [
    'driver'   => 'sqlite',
    'database' => ':memory:',
    'prefix'   => '',
],
这个内存中的sqlite将用于您的测试

2) 打开
.env
文件并确保其具有以下内容:

DB_CONNECTION=mysql
3) 打开
phpunit.xml
并在
标记中添加以下内容:

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

有关数据库迁移的更多详细信息,请参阅文档

请共享您的环境设置codemy.env文件只包含一些基本内容,如
APP_env=local
–我下班回家后会复制完整文件我使用phpunit进行集成测试,因此我需要使用单独的数据库。这解决了我的问题,谢谢!投了赞成票,但我也希望看到Codeception的解决方案。感谢您的回复:在Laravel 5.1上,我没有使用
DB\u驱动程序
,而是使用
DB\u连接
,就像这样:
我从
config/database.php
文件中得到了这个值。几天前我自己发现了这个值,然后碰巧在acros这是你的评论:)投票吧!
use DatabaseMigrations;