laravel phpunit未知数据库':内存:

时间:2019-03-19 06:25:30

标签: laravel laravel-5 phpunit

此错误困扰着我。我的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,但没有帮助。

2 个答案:

答案 0 :(得分:0)

请确保以下内容:-

  • 确保已安装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>

答案 1 :(得分:0)

对我来说,问题在于我正在与正在测试的模型建立另一个连接。 例如:

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';

,上面的错误消息“ unknown database:memory:”消失了。现在一切正常。