【问题标题】:How to use separate database for testing in Laravel 5?如何在 Laravel 5 中使用单独的数据库进行测试?
【发布时间】:2019-08-05 05:48:30
【问题描述】:

我需要使用单独的数据库运行测试

我使用 POSTGRESQL 作为数据库驱动程序。

我的配置/database.php

'pgsql' => [
        'driver' => 'pgsql',
        'host' => env('DB_HOST', '127.0.0.1'),
        'port' => env('DB_PORT', '5432'),
        'database' => env('DB_DATABASE', 'forge'),
        'username' => env('DB_USERNAME', 'forge'),
        'password' => env('DB_PASSWORD', ''),
        'charset' => 'utf8',
        'prefix' => '',
        'schema' => 'public',
        'sslmode' => 'prefer',
    ],

专门用于运行测试我在 phpunit.xml 中定义了DB_DATABASE

<php>
    <env name="APP_ENV" value="testing"/>
    <env name="BCRYPT_ROUNDS" value="4"/>
    <env name="CACHE_DRIVER" value="array"/>
    <env name="SESSION_DRIVER" value="array"/>
    <env name="QUEUE_DRIVER" value="sync"/>
    <env name="MAIL_DRIVER" value="array"/>
    <env name="TELESCOPE_ENABLED" value="false"/>
    ...
    <env name="DB_DATABASE" value="database_test"/>
</php>

但是当我运行我的 PHPUnit 测试时,我得到了错误

PDOException: SQLSTATE[08006] [7] FATAL: 数据库“database_test”不存在

【问题讨论】:

  • 我建议遵循以下@thisiskelvin 的方法。但是,如果仍然想使用您的方法,您只需要在运行测试之前在 postgres 中创建 database_test 数据库即可。

标签: postgresql laravel-5 phpunit


【解决方案1】:

新连接必须设置在database.php内。

我建议设置一个专门用于测试的 sqlite 数据库连接:

...

'connections' => [
    'database_test' => [
        'driver'   => 'sqlite',
        'database' => ':memory:',
        'prefix'   => '',
    ],
...

这将创建一个在内存中运行的 sqlite 数据库连接。

然后您必须设置DB_CONNECTION 而不是DB_DATABASE

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-15
    • 2017-04-02
    • 2018-07-18
    • 2021-04-15
    • 1970-01-01
    • 2015-07-19
    • 2015-09-16
    相关资源
    最近更新 更多