拉拉维尔。测试清除活动数据库
Posted
技术标签:
【中文标题】拉拉维尔。测试清除活动数据库【英文标题】:Laravel. Tests clear the active DB 【发布时间】:2021-01-17 05:19:53 【问题描述】:我的活动数据库中的表在测试后是空的。
我有测试环境变量DB_CONNECTION=mysql_testing
。当我运行测试并执行dd(env('DB_CONNECTION'))
时 - 一切都很好。我看到'mysql_testing'。
但是当我写dd( \DB::connection()->getDatabaseName())
时,我看到了错误的数据库名称(例如'db_name',但它应该是'testing_db_name')。它是活动数据库的名称。这不是配置缓存。那里一切都很好。我看到“mysql_testing”连接的正确数据库名称。我什至尝试设置测试环境变量DB_DATABASE=testing_db_name
。
堆栈:Laravel 7.28.3、phpUnit 8.5.8
【问题讨论】:
尝试运行php artisan cache:clear
@p-k-tharindu 不,我写了关于缓存的文章。那里一切都很好。我做了php artisan cache:clear
显示您如何在数据库配置中定义连接
@P.K.Tharindu 'mysql_testing' => [ 'driver' => 'mysql', 'database' => env('DB_DATABASE_TESTING', 'testing'), ...],
【参考方案1】:
研究了很久的stack trace,发现了问题!尽管如此,缓存竟然是。 需要清除配置缓存('php artisan config: clear'),因为 Laravel 存储旧的连接名称。
我只是尝试清除缓存(“php artisan cache: clear”)或同时清除和缓存配置(“php artisan config:cache”)。这就是它不起作用的原因。
顺便说一句,GitHub 上有一个关于此的问题。但我找不到它,因为我不知道问题出在哪里。如果您缓存配置和路由,则有一个小技巧可以避免每次在运行测试之前清除配置缓存。
感谢@P.K.Tharindu 的帮助。你已经接近答案了。
【讨论】:
【参考方案2】:根据您设置数据库连接的方式,您应该定义DB_DATABASE_TESTING=testing_db_name
而不是DB_DATABASE=testing_db_name
。
【讨论】:
没关系。我没有同名的环境变量(DB_DATABASE_TESTING)。因此,Laravel 必须在配置中选择默认值。至少我只是试图设置这个变量。正如预期的那样,它没有用。以上是关于拉拉维尔。测试清除活动数据库的主要内容,如果未能解决你的问题,请参考以下文章