Laravel 忽略测试数据库连接

Posted

技术标签:

【中文标题】Laravel 忽略测试数据库连接【英文标题】:Laravel ignores testing database connection 【发布时间】:2017-04-12 05:41:12 【问题描述】:

我使用 Laravel 5.3.22 并希望使用内存中的 sqlite 数据库对我的应用程序进行单元测试,正如 here 所说,为每个测试迁移/回滚。这是我的 database.php 配置的连接部分:

'mysql' => [
            'driver'    => 'mysql',
            'host'      => env('DB_HOST', 'localhost'),
            'database'  => env('DB_DATABASE', 'forge'),
            'username'  => env('DB_USERNAME', 'forge'),
            'password'  => env('DB_PASSWORD', ''),
            ...
        ],

        'testing' => [
            'driver'   => 'sqlite',
            'database' => ':memory:',
            'prefix'   => '',
        ],

这是 phpunit 环境配置:

<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="testing"/>
</php>

phpunit 配置意味着 laravel 应该使用“测试”sqlite 连接进行测试,但它并不关心并继续使用主 mysql 连接。这不是一个选项,我有一个大而复杂的架构,它不能用于 mysql 的单元测试。我该如何进行?我无法模拟查询生成器,因为我需要断言它的结果。

【问题讨论】:

【参考方案1】:

我已经找到了问题所在,我一直在本地环境中使用配置缓存,它一直在阻止 Laravel 使用 phpunit 配置。 config:clear artisan 命令有帮助。我还将文件缓存驱动程序更改为我本地环境的数组一。

【讨论】:

以上是关于Laravel 忽略测试数据库连接的主要内容,如果未能解决你的问题,请参考以下文章

在 Laravel 中使用 MySQL 数据库连接运行多个单元测试时出错

如何在 Laravel 的 PHPUnit 中启用 Redis 连接

如何在新浪云sae上安装部署laravel5.1应用并测试数据库连接

使用 phpunit 进行 Laravel 测试

Laravel:SQLSTATE [HY000] [2002] 连接被拒绝

laravel测试连接可用性