拉拉维尔。测试清除活动数据库

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 必须在配置中选择默认值。至少我只是试图设置这个变量。正如预期的那样,它没有用。

以上是关于拉拉维尔。测试清除活动数据库的主要内容,如果未能解决你的问题,请参考以下文章

拉拉维尔 5.6。如何测试 JSON/JSONb 列

数据库中存在名称?拉拉维尔

拉拉维尔 |大量数据的特殊验证

更新或创建行数据库。拉拉维尔

PHP 如何将表单输入与数据库值进行比较 |拉拉维尔

拉拉维尔。如果数据库正在播种,则禁用观察者方法