测试Laravel时无法连接到sqLite

时间:2017-08-04 07:34:20

标签: laravel testing phpunit

我在尝试执行测试时遇到此错误(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>

database.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。

1 个答案:

答案 0 :(得分:0)

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

  

连接数据库时发生错误':memory:'。服务器报告的错误是:SQLSTATE [HY000] [1044]拒绝访问用户'mick'@'%'访问数据库':memory:'

这表明不是使用Sqlite数据库而是使用Mysql数据库。我根本不熟悉Laravel,但我会说有一些对Mysql的回落。出于测试目的,我将从整体配置中删除Mysql,看看它出现了什么。

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