laravel 未知的数据库':memory:

qzlgjiam  于 2023-03-19  发布在  其他
关注(0)|答案(3)|浏览(107)

我的laravel版本是5.6我不认为我已经做了任何更改我的phpunit.xml文件除了这些

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

    </php>

我是这样写测试的:

<?php

namespace Tests\Feature;

use Tests\TestCase;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Foundation\Testing\DatabaseMigrations;

class DemoTest extends TestCase
{
    use DatabaseMigrations;

    public function test_it_is_nothing()
    {
        $this->get('/volunteers')->assertStatus('200');
    }
}

我也参考了这篇文章Laravel multiple databases PHPUnit,但没有帮助。

ycl3bljg

ycl3bljg1#

请确保以下事项:-

  • 确保你有sqlite数据库安装
  • 清除你的配置php artisan config:clear
  • 还要确保phpunit.xml存在于项目根目录中
  • 请检查phpunit.xml中是否有DB_DRIVER env,请将其删除
  • 运行测试时,尝试将配置指向phpunit.xml vendor/bin/phpunit --config PATH_TO_YOUR_PHPUNIT_XML_FILE
  • 尝试到更新你的phpunit版本

如果以上都不起作用,请尝试添加另一个数据库配置到您的config/database.php

'sqlite_testing' => [
    'driver'   => 'sqlite',
    'database' => ':memory:',
    'prefix'   => '',
]

那么你的phpunit.xml应该是这样的

<?xml version="1.0" encoding="UTF-8"?>
<phpunit>
    ...
    <php>
        <env name="APP_ENV" value="testing"/>
        <env name="CACHE_DRIVER" value="array"/>
        <env name="SESSION_DRIVER" value="array"/>
        <env name="QUEUE_DRIVER" value="sync"/>
        <env name="DB_DEFAULT" value="sqlite_testing" />
    </php>
</phpunit>
kupeojn6

kupeojn62#

对我来说,问题是我正在测试的模型有另一个连接。例如:

namespace App;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;

class Salesperson extends Model
{
    use SoftDeletes;

    protected $connection = 'mysql_dynamic_db';

    /**
    * The attributes that are mass assignable.
    *
    * @var array
    */
    protected $fillable = [
        'name',
        'f_name',
        'cnic',
        'address',
        'mobile',
        'email',
        'salary',
        'comm_percent',
    ];
}

因此,在运行测试时,我只注解以下行:

protected $connection = 'mysql_dynamic_db';

上面的 * 未知数据库:内存:* 错误已经消失。现在一切正常。

gstyhher

gstyhher3#

首先,检查行扩展名=pdo_sqlite是否在php.ini中没有注解。
改变它

;extension=pdo_sqlite

extension=pdo_sqlite

然后转到您的config/database.php文件并像下面的示例那样更改sqlite数据库

'connections' => [
  'sqlite' => [
    'driver' => 'sqlite',
    'url' => env('DATABASE_URL'),
    'database' => env('DB_DATABASE',database_path('database.sqlite')),
    'prefix' => '',
    'foreign_key_constraints' => env('DB_FOREIGN_KEYS', true),
  ],
  ....
];

'connections' => [
  'sqlite' => [
    'driver' => 'sqlite',
    'url' => env('DATABASE_URL'),
    'database' => ':memory:',
    'prefix' => '',
    'foreign_key_constraints' => env('DB_FOREIGN_KEYS', true),
  ],
];

您也可以更改数据库,但使用一个数据库进行测试,不要使用生产数据库。
您可以简单地更改名称:memory:设置为您正在使用的数据库的名称,如下所示
这个

<env name="DB_DATABASE" value=":memory:"/>

<env name="DB_DATABASE" value="name_database"/>

如有必要,不要忘记更改DB_CONNECTION。

相关问题