Laravel 5 应用程序始终使用“测试”环境配置
Posted
技术标签:
【中文标题】Laravel 5 应用程序始终使用“测试”环境配置【英文标题】:Laravel 5 app always using 'testing' environment configuration 【发布时间】:2015-02-10 21:06:15 【问题描述】:我有一个 Laravel 5 应用程序,它有两个环境和两个配置:测试(用于 phpUnit 配置,内存数据库)和本地(我的开发配置)。
即使环境配置为local
,应用程序也只会加载resources/config/testing
文件夹中的配置。我可以从APP_ENV
环境变量看到同一个应用程序中的环境,它是local
。
我是否应该不使用测试配置目录来配置我的测试?
在 Laravel 5 中配置测试环境的更好方法是什么?
【问题讨论】:
请分享您的环境设置代码 我的 .env 文件只包含APP_ENV=local
之类的基本内容——我下班回家后会复制完整的文件
【参考方案1】:
Laravel 5 不再正确地级联配置文件,因此您的测试配置文件将覆盖您本地配置文件中的任何内容。
现在您不应该为每个环境都有任何子文件夹,而是在根文件夹的 .env 文件中设置配置设置。
此文件未签入到 repo 以确保没有任何敏感内容被签入 repo。您应该为您的应用程序所处的每个环境创建一个单独的 .env 文件。
测试
对于 php 单元(功能),您可以在 phpunit.xml 文件中设置环境变量,例如 ..
<php>
<env name="APP_ENV" value="testing"/>
<env name="CACHE_DRIVER" value="array"/>
<env name="SESSION_DRIVER" value="array"/>
</php>
对于行为(验收)测试,Laracasts Laravel Behat 扩展允许您创建一个 .env.behat 文件来更改环境变量。
对于 phpspec(单元)测试而言,环境应该无关紧要,因为您可以单独测试各个方法并模拟其他所有方法。
对于 selenium (integration / system / e2e) 测试,环境变量应该来自服务器上的 .env 文件,无论您在哪里进行测试。
【讨论】:
我使用 phpunit 进行集成测试,所以我需要使用单独的数据库。这解决了我的问题,谢谢! 赞成,但也希望看到 Codeception 的解决方案。【参考方案2】:我刚刚用来在 sqlite 上运行测试的附加点,而主应用程序通常默认为 mysql:
向 phpunit.xml 添加类似的内容,正如 craig.michael.morris 所解释的那样:
<env name="DB_DRIVER" value="sqlite"/>
而对 config/database.php 的更改
'default' => env('DB_DRIVER', 'mysql'),
在 config/database.php 的 'sqlite' 部分中
'database' => ':memory:',
【讨论】:
感谢您的回复:在 Laravel 5.1 而不是DB_DRIVER
上,我不得不像这样使用 DB_CONNECTION
:<env name="DB_CONNECTION" value="sqlite"/>
我从 config/database.php
文件中获得了这个值。
几天前我自己发现了这一点,然后碰巧看到了你的评论 :) 点个赞!【参考方案3】:
1) 打开配置文件database.php
并在'connections' => [
中添加以下内容
'sqlite_testing' => [
'driver' => 'sqlite',
'database' => ':memory:',
'prefix' => '',
],
内存中的这个sqlite将用于您的测试
2) 打开.env
文件并确保它具有以下内容:
DB_CONNECTION=mysql
3) 打开phpunit.xml
并在<php>
标签内添加以下内容:
<env name="DB_CONNECTION" value="sqlite_testing"/>
在这里您可以添加所有与测试相关的环境变量
4) 在您的测试中,您是否使用数据库连接使用数据库迁移特性:
use DatabaseMigrations;
有关 DatabaseMigrations 的更多详细信息,请参阅文档https://laravel.com/docs/5.1/testing#resetting-the-database-after-each-test
【讨论】:
以上是关于Laravel 5 应用程序始终使用“测试”环境配置的主要内容,如果未能解决你的问题,请参考以下文章
在laravel 5.2中,Laravel手动登录始终不匹配