Laravel 5应用程序始终使用"测试"环境配置

Sim*_*ted 12 php environment phpunit laravel laravel-5

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

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

  • 我应该不使用测试配置目录来配置我的测试吗?

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

mor*_*top 27

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

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

此文件未签入到repo中,以确保在repo中没有检查到任何敏感信息.对于应用程序所处的每个环境,您应该有一个单独的.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>
Run Code Online (Sandbox Code Playgroud)

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

对于phpspec(单位)测试,环境应该不重要,因为您单独测试单个方法并模拟其他所有方法.

对于selenium(集成/系统/ e2e)测试,环境变量应来自服务器上的.env文件,无论您在何处进行此测试.


mar*_*ite 16

我只是用来在sqlite上运行测试的附加点,而主应用程序通常默认为mysql:

像craig.michael.morris解释的那样在phpunit.xml中添加这样的东西:

<env name="DB_DRIVER" value="sqlite"/>
Run Code Online (Sandbox Code Playgroud)

这改为config/database.php

'default' => env('DB_DRIVER', 'mysql'),
Run Code Online (Sandbox Code Playgroud)

在config/database.php的'sqlite'部分

'database' => ':memory:',
Run Code Online (Sandbox Code Playgroud)

  • 感谢您的回复:在Laravel 5.1而不是`DB_DRIVER`上我必须像这样使用`DB_CONNECTION`:`<env name ="DB_CONNECTION"value ="sqlite"/>`我从`config/database获得了这个值. php`文件. (7认同)