Laravel 5:使用不同的数据库进行测试和本地

时间:2016-02-05 15:02:29

标签: php laravel

如何更改数据库以便在本地系统上进行开发和测试而不必每次都编辑.env文件?

由于这个原因,我发现练习 TDD 非常不方便。

Laravel 应用程序是否可以区分正常开发和测试,以便它可以选择适当的数据库?

6 个答案:

答案 0 :(得分:31)

在Laravel中创建测试数据库配置

修改config\database.php文件,并在testing数组中添加connections - 数组:

'connections' = [
    'testing' = [
        'driver' => env('DB_TEST_DRIVER'),
        // more details on your testing database
    ]
]

然后将必要的变量添加到.env - 文件。

编辑PHPUnit配置

打开phpunit.xml - 文件,在<php> - 标记中添加以下内容:

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

现在PHPUnit将运行您在testing - 数组中定义的数据库上的测试。

答案 1 :(得分:26)

对于Laravel 5.5,正确的方法是创建一个名为.env.testing的测试环境文件。在这里,您可以定义测试环境,包括您要用于测试的数据库......

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=test DB
DB_USERNAME=test DB user
DB_PASSWORD=test DB password

然后运行此命令......

php artisan config:cache --env=testing

这会将缓存配置为.env.testing文件参数。

Here是文档的链接。

答案 2 :(得分:6)

如果您的测试数据库使用相同的配置但只是它的名称不同,则只能通过添加

来更改所选的数据库名称
<env name="DB_DATABASE" value="testing_db_name"/>

phpunit.xml节点

中的文件<php>

答案 3 :(得分:0)

如果您的某个单元测试需要特定的数据库,请在单元测试开始时添加此代码

    $connections                                    = config('database.connections');
    $connections['single_test_database_connection'] = [
        'driver'      => 'mysql',
        'host'        => env('DB_HOST', '127.0.0.1'),
        'port'        => env('DB_PORT', '3306'),
        'database'    => 'single_test_database',
        'username'    => env('DB_USERNAME', 'forge'),
        'password'    => env('DB_PASSWORD', ''),
        'unix_socket' => env('DB_SOCKET', ''),
        'charset'     => 'utf8mb4',
        'collation'   => 'utf8mb4_unicode_ci',
        'prefix'      => '',
        'strict'      => true,
        'engine'      => null,
    ];
    config()->set('database.connections', $connections);
    config()->set('database.default', 'single_test_database_connection');

答案 4 :(得分:0)

对于那些想要使用sqlite进行测试的人

创建测试环境文件和test.sqlite文件

ItemSource

在.env.testing文件中

> cp .env .env.testing
> touch test.sqlite

之后

DB_CONNECTION=sqlite
DB_DATABASE=./test.sqlite

现在再次迁移数据库

php artisan config:cache --env=testing

如果需要,请播种

php artisan migrate

只要您想使用本地环境,就运行

php artisan db:seed

请注意,.env文件中的环境名称可以是php artisan config:cache --env=local = local

答案 5 :(得分:-1)

您可以为每种类型的测试使用不同的.env文件。您可以修改您的tests / functional.suite.yml和tests / unit.suite.yml,如下所示:

class_name: FunctionalTester
modules:
    enabled: [Laravel5, FunctionalHelper, Asserts]
    config:
        Laravel5:
            environment_file: .env.testing

而且:

class_name: UnitTester
modules:
    enabled: [Asserts, UnitHelper, Laravel5]
    config:
        Laravel5:
            environment_file: .env.unittesting

或者你可以简单地修改你的phpunit.xml并添加像上面的@Tijmen那样的环境变量。