【问题标题】: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'), ...],

标签: php laravel testing phpunit


【解决方案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 必须在配置中选择默认值。至少我只是试图设置这个变量。正如预期的那样,它没有用。
    猜你喜欢
    • 1970-01-01
    • 2016-08-27
    • 2018-08-26
    • 1970-01-01
    • 2018-10-16
    • 2018-06-08
    • 2017-03-12
    • 2021-07-12
    • 1970-01-01
    相关资源
    最近更新 更多