我有一个Laravel 5应用程序,有两个环境和两个配置:testing(用于PHPUnit配置,内存db)和local(我的开发配置)。
即使将环境配置为local
,应用程序仍然只加载resources/config/testing
文件夹中的配置。我可以从APP_ENV
环境变量中看到相同的应用程序环境,并且它是local
。
我是否应该不使用testing配置目录来配置我的测试?
Laravel 5中配置我的测试环境有更好的方法吗?
我有一个Laravel 5应用程序,有两个环境和两个配置:testing(用于PHPUnit配置,内存db)和local(我的开发配置)。
即使将环境配置为local
,应用程序仍然只加载resources/config/testing
文件夹中的配置。我可以从APP_ENV
环境变量中看到相同的应用程序环境,并且它是local
。
我是否应该不使用testing配置目录来配置我的测试?
Laravel 5中配置我的测试环境有更好的方法吗?
Laravel 5无法正确地级联配置文件,因此您的测试配置文件正在覆盖您本地配置文件中的任何内容。
现在,您不应该为每个环境设置任何子文件夹,而是在根文件夹中的.env文件中设置配置设置。
为确保不会将敏感信息提交到代码库中,此文件不会被检入代码库。您应该为应用程序所在的每个环境拥有一个单独的.env文件。
测试
对于phpunit(功能测试),您可以在phpunit.xml文件中设置环境变量,例如:
<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(集成/系统/e2e)测试,环境变量应该来自服务器上的 .env 文件,无论您在哪里进行此测试。
以下是我最近为了在sqlite上运行测试而不得不使用的一些额外技巧,而主应用程序通常默认使用mysql:
根据craig.michael.morris的解释,在phpunit.xml中添加类似下面这样的内容:
<env name="DB_DRIVER" value="sqlite"/>
还有对config/database.php的更改
'default' => env('DB_DRIVER', 'mysql'),
在config/database.php文件中的'sqlite'部分
'database' => ':memory:',
DB_CONNECTION
替代 DB_DRIVER
,例如:<env name="DB_CONNECTION" value="sqlite"/>
,我从 config/database.php
文件中获取了这个值。 - racl1011) 打开配置文件 database.php
,并在'connections' => [
中添加以下内容:
'sqlite_testing' => [
'driver' => 'sqlite',
'database' => ':memory:',
'prefix' => '',
],
.env
文件,并确保它包含以下内容:DB_CONNECTION=mysql
3) 打开phpunit.xml
并在<php>
标签内添加以下内容:
<env name="DB_CONNECTION" value="sqlite_testing"/>
这里是您可以添加所有与测试相关的环境变量的位置。
4)在使用数据库连接的测试中,请使用数据库迁移特性:
use DatabaseMigrations;
关于数据库迁移的更多细节,请参阅文档https://laravel.com/docs/5.1/testing#resetting-the-database-after-each-test
。
APP_ENV=local
- 我会在下班回家后复制整个文件。 - Simon Fredsted