【问题标题】:laravel phpunit Unknown database ':memory:laravel phpunit 未知数据库':内存:
【发布时间】:2019-08-09 14:48:02
【问题描述】:

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

【问题讨论】:

    标签: laravel laravel-5 phpunit


    【解决方案1】:

    请确保以下几点:-

    • 确保已安装 sqlite db
    • 清除您的配置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>
    

    【讨论】:

    • 我已经完成了所有这些事情。我有单元版本 7.5.6。
    • 你更新phpunit版本了吗?你能分享你的 phpunit.xml 文件吗?
    • 我更新了答案,请看看可能会解决您的问题。
    • 那不起作用..我也做了工匠清除,但没有使用sqlite,而是使用mysql..并清除我的表
    • 也许 sqlite 是问题所在......我已经在 C:\sqlite 中解压缩了 sqlite3.def sqlite3.dll sqlite3.exe 并设置了环境变量......但是 bash 上的 sqlite3 没有运行它
    【解决方案2】:

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

    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: 消失了。现在一切正常。

    【讨论】:

      猜你喜欢
      • 2021-02-09
      • 2018-11-15
      • 2016-01-09
      • 1970-01-01
      • 2018-08-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-08
      相关资源
      最近更新 更多