测试Laravel时无法连接到sqLite

测试Laravel时无法连接到sqLite,laravel,testing,phpunit,Laravel,Testing,Phpunit,我在尝试执行测试时出现此错误(Laravel 5.3): phpUnit.xml <php> <env name="APP_ENV" value="testing"/> <env name="DB_CONNECTION" value="sqlite"/> <env name="DB_DATABASE" value=":memory:"/> <env name="CACHE_DRI

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

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>
我做错了什么?这些设置在另一个项目中正常工作吗

我没有使用配置缓存

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

米克

编辑:刚刚回到这里,我用它来调试:

$string ="Name: " .  DB::connection()->getName() . " DB: " . DB::connection()->getDatabaseName() . " Driver: " . DB::connection()->getDriverName();
因此,如果我在导致错误的行之前执行此操作,我会得到:

“名称:sqlite DB::内存:驱动程序:sqlite”

然后,该代码执行:

 $this->actingAs($user)
            ->visit('/')
            ->click('Categories');
再一次,我得到了一个错误:


{“sError”:“连接到数据库时出错”:内存:”。服务器报告的错误是:用户“mick”@“%”对数据库的SQLSTATE[HY000][1044]访问被拒绝:内存:“}

如果我只是这样做:

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

然后测试执行OK。

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

连接到数据库时出错:“内存:”。服务器报告的错误是:用户“mick”@“%”对数据库的SQLSTATE[HY000][1044]访问被拒绝:内存:'

这表明使用的不是Sqlite数据库,而是Mysql数据库。我对Laravel一点也不流利,但我要说的是,Mysql在实际操作中有一些缺陷。出于测试目的,我将从整体配置中删除Mysql,看看会出现什么结果


这与您决定要做的完全不同,即完全切换到Mysql(根据您在Laracast论坛上的帖子)。

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

连接到数据库时出错:“内存:”。服务器报告的错误是:用户“mick”@“%”对数据库的SQLSTATE[HY000][1044]访问被拒绝:内存:'

这表明使用的不是Sqlite数据库,而是Mysql数据库。我对Laravel一点也不流利,但我要说的是,Mysql在实际操作中有一些缺陷。出于测试目的,我将从整体配置中删除Mysql,看看会出现什么结果


这与您决定要做的完全不同,即完全切换到Mysql(根据您在Laracast论坛上的帖子)。

让我问您一个问题,为什么您要将DB配置从.env中删除?您是想说,为什么我要从.env文件中删除我的设置?在测试时,我没有使用phpunit.xml中的值。您使用什么操作系统?您能运行以下命令吗?
$sqlite3
?Linux-Centos。Yes.X-Ref:让我问你一个问题,为什么你要把DB配置从.env中删除?你是想说,为什么我要把我的设置从.env文件中删除?在测试时,我没有使用phpunit.xml中的值。您使用什么操作系统?您能运行以下命令吗?
$sqlite3
?Linux-Centos。Yes.X-Ref:我删除了所有mysql详细信息,现在我得到了以下信息:
{“sError”:“连接到数据库时出错”:内存:”。服务器报告的错误是:拒绝用户“@”localhost“访问数据库”:内存:“}[mick@devwebapplication-02仪表板]$
@Mick:这仍然是一条Mysql驱动程序错误消息。是否默认情况下Laravel自动连接到Mysql?我认为你需要打破这种局面。此外,它还表明,Laravel根本不考虑使用您的测试数据库配置。这意味着这仍处于配置问题的级别。Laravel文档应该在这里提供更多的细节(因为写的不是流利的w/Laravel,不知道文档是否涵盖了这些应用程序配置的基本内容,但我认为应该)。谢谢@hakre,我的想法正是如此。奇怪的是,我在另一个项目中工作,看不出两者之间有什么区别。@Mick:我可以想象这可能很奇怪,但我没有任何提示。如文所述,拉拉威尔不流利。有点遗憾的是,医生们并不清楚这一点,情况似乎相当直截了当,不知道那里可能有什么神秘的魔法。可能只是一个配置问题。我删除了所有mysql详细信息,现在得到以下信息:
{“sError”:“连接到数据库时出错”:内存:”。服务器报告的错误是:拒绝用户“@”localhost“访问数据库”:内存:“}[mick@devwebapplication-02仪表板]$
@Mick:这仍然是一条Mysql驱动程序错误消息。是否默认情况下Laravel自动连接到Mysql?我认为你需要打破这种局面。此外,它还表明,Laravel根本不考虑使用您的测试数据库配置。这意味着这仍处于配置问题的级别。Laravel文档应该在这里提供更多的细节(因为写的不是流利的w/Laravel,不知道文档是否涵盖了这些应用程序配置的基本内容,但我认为应该)。谢谢@hakre,我的想法正是如此。奇怪的是,我在另一个项目中工作,看不出两者之间有什么区别。@Mick:我可以想象这可能很奇怪,但我没有任何提示。如文所述,拉拉威尔不流利。有点遗憾的是,医生们并不清楚这一点,情况似乎相当直截了当,不知道那里可能有什么神秘的魔法。也许只是一个配置问题。
 $this->actingAs($user)
            ->visit('/')
            ->click('Categories');
 $this->actingAs($user)
            ->visit('/');