如何在Laravel 5中为phpunit指定不同的.env文件?

2022-08-30 14:12:39

我有一个包含数据库连接详细信息的文件,这在Laravel 5中是正常的。我想覆盖这些进行测试,我可以在.但是,这样做似乎违背了不提交环境配置(尤其是密码)的理念。.envphpunit.xml.env

有没有可能有类似的东西,并告诉从中阅读?.env.testingphpunit.xml


答案 1

您可以重写文件中正在使用的文件,其中框架是用于测试的。.envTestCase

更具体:

测试/测试用例.php

/**
 * Creates the application.
 *
 * @return \Illuminate\Foundation\Application
 */
public function createApplication()
{
    /* @var \Illuminate\Foundation\Application $app */
    $app = require __DIR__ . '/../bootstrap/app.php';

    $app->loadEnvironmentFrom('.env.testing'); // specify the file to use for environment, must be run before boostrap

    $app->make('Illuminate\Contracts\Console\Kernel')->bootstrap();

    return $app;
}

所有扩展的测试都将使用此配置文件。TestCase

请注意,中定义的任何设置都将覆盖此配置。phpunit.xml

更新

从 Laravel5.4 开始,该函数不再出现在 tests\TestCase 中。它已移至测试\创建应用程序特征。createApplication


答案 2

将你的复制到 ,然后编辑文件并更改参数,使其像这样,您将能够指定此新文件的设置.env.env.testing.env.testingAPP_ENVAPP_ENV=testing

如果您不想创建新文件,则必须在php部分中指定具有所需值的变量,如下所示.env.testingphpunit.xml

<php>
    <env name="APP_ENV" value="testing"/>
    <env name="CACHE_DRIVER" value="array"/>
    <env name="SESSION_DRIVER" value="array"/>
    <env name="QUEUE_DRIVER" value="sync"/>
    <env name="DB_CONNECTION" value="sqlite"/>
    <env name="DB_DATABASE" value="testing"/>
</php>

只需在名称部分中使用键值,在值部分中使用该键的值。

对于此示例,我指定 phpunit 使用具有测试名称的 sqlite 数据库。

顺便说一句,在config/database中.php我添加了这个默认使用mysql,除非我指定了一些不同的东西,就像在这种情况下一样。'default' => env('DB_CONNECTION', 'mysql'),


推荐