【问题标题】:Cannot connect to sqLite when testing Laravel测试 Laravel 时无法连接到 sqLite
【发布时间】:2018-01-12 00:52:56
【问题描述】:

尝试执行我的测试时出现此错误(Laravel 5.3):

PHPUnit 5.7.13 by Sebastian Bergmann and contributors.

E{"sError":"An error occurred while connecting to the database ':memory:'. The error reported by the server was: SQLSTATE[HY000] [1044] Access denied for user 'mick'@'%' to database ':memory:'"}

phpUnit.xml

<php>
        <env name="APP_ENV" value="testing"/>
        <env name="DB_CONNECTION" value="sqlite"/>
        <env name="DB_DATABASE" value=":memory:"/>
        <env name="CACHE_DRIVER" value="array"/>
        <env name="SESSION_DRIVER" value="array"/>
        <env name="QUEUE_DRIVER" value="sync"/>
    </php>

数据库.php

 'sqlite' => [
            'driver' => 'sqlite',
            'database' => env('DB_DATABASE', database_path('database.sqlite')),
            'prefix' => '',
        ],

我做错了什么?这些设置在另一个项目中工作正常吗?

我没有使用配置缓存。

看起来它仍在使用我的 .env 中的值

米克

编辑:刚刚回到这个,我正在使用它来调试:

$string ="Name: " .  DB::connection()->getName() . " DB: " . DB::connection()->getDatabaseName() . " Driver: " . DB::connection()->getDriverName();

所以,如果我在导致错误的行之前执行此操作,我会得到: "Name: sqlite DB: :memory: Driver: sqlite"

然后,这段代码执行:

 $this->actingAs($user)
            ->visit('/')
            ->click('Categories');

又一次,我得到了错误:

{"sError":"An error occurred while connecting to the database ':memory:'. The error reported by the server was: SQLSTATE[HY000] [1044] Access denied for user 'mick'@'%' to database ':memory:'"}

如果我这样做:

 $this->actingAs($user)
            ->visit('/');

然后测试执行OK。

【问题讨论】:

  • 让我问你一件事,为什么你的数据库配置来自 .env?
  • 你是想说,我为什么要从 .env 文件中取出我的设置?我在测试时没有使用 phpunit.xml 中的值。
  • 您使用什么操作系统?你能运行下面的命令$ sqlite3吗?
  • Linux - Centos。是的。

标签: laravel testing phpunit


【解决方案1】:

您在问题中报告的错误消息:

连接到数据库 ':memory:' 时出错。服务器报错为:SQLSTATE[HY000] [1044] Access denied for user 'mick'@'%' to database ':memory:'

这表明使用的不是 Sqlite 数据库,而是 Mysql 数据库。我对 Laravel 一点也不流利,但我想说有一些回退到 Mysql 的作用。出于测试目的,我将从整体配置中删除 Mysql 并查看结果。

这与你决定做的完全不同,那就是完全切换到 Mysql(根据你在 Laracast 论坛上的帖子)。

【讨论】:

  • 我删除了所有 mysql 详细信息,现在我得到了这个:{"sError":"An error occurred while connecting to the database ':memory:'. The error reported by the server was: SQLSTATE[HY000] [1044] Access denied for user ''@'localhost' to database ':memory:'"}[mick@devwebapplication-02 dashboards]$
  • @Mick:这仍然是一个Mysql驱动错误信息。会不会是 Laravel 默认自动连接到 Mysql 的?我认为你需要打破这种局面。此外,它表明 Laravel 甚至根本没有考虑使用您的测试数据库配置。这意味着这仍处于配置问题的级别。 Laravel 文档应该在此处提供更多详细信息(因为使用 Laravel 编写的并不流利,不知道文档是否涵盖了应用程序配置的这些基本内容,但我会说应该)。
  • 谢谢@hakre,我的想法完全正确。奇怪的是,我在另一个项目中工作,看不出两者之间有什么区别。
  • @Mick:我可以想象这可能很奇怪,但我没有提示。如所写,不熟悉 Laravel。有点遗憾的是文档并不清楚这一点,场景似乎相当简单,不知道那里可能存在哪种深奥的魔法。也许只是配置问题。
猜你喜欢
  • 2019-11-07
  • 1970-01-01
  • 2017-08-20
  • 2021-06-11
  • 2019-10-05
  • 2013-09-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-13
相关资源
最近更新 更多