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

时间:2014-12-12 07:28:40

标签: php laravel laravel-5 phpunit environment

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

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

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

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

3 个答案:

答案 0 :(得分:27)

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(集成/系统/ e2e)测试,环境变量应来自服务器上的.env文件,无论您在何处进行此测试。

答案 1 :(得分:16)

我只是用来在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:',

答案 2 :(得分:3)

1)打开配置文件dot_color = colorPicker_value; calendarView.setEventDataProvider(new FlexibleCalendarView.EventDataProvider() { @Override public List<? extends Event> getEventsForTheDay(int year, int month, int day) { if (year == year_i && month == month_i_2 && day == today_i) { List<CustomEvent> colorLst1 = new ArrayList<>(); if (dot_color != 0) { colorLst1.add(new CustomEvent(dot_color)); } return colorLst1; } return null; } }); return rootView; } 并在database.php

中添加以下内容
'connections' => [

这在内存中sqlite将用于您的测试

2)打开'sqlite_testing' => [ 'driver' => 'sqlite', 'database' => ':memory:', 'prefix' => '', ], 文件并确保其具有以下内容:

.env

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

<php>

这里可以添加所有与测试相关的env变量

4)在您的测试中,您使用数据库迁移特性使用数据库连接:

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

有关DatabaseMigrations的更多详细信息,请参阅文档https://laravel.com/docs/5.1/testing#resetting-the-database-after-each-test