Laravel多数据库PHPUnit

8 浏览
0 Comments

Laravel多数据库PHPUnit

这个问题已经在这里得到了答案:

如何在Laravel中使用多个数据库

我正在开发一个具有多个数据库访问的应用程序,并希望使用PHPUnit测试。我目前的方法是在config\\databases.php中有多个连接(mysql、mysql2、mysql3),因此我可以在env文件中为它们每个人设置不同的访问。因此,模型具有定义$connection变量。在我的第一个功能测试中,我想访问一个页面,只看到我在工厂中提供的数据,这样才能开始做事。在我的phpunit.xml文件中,我已经指定了DB_CONNECTIONsqlite,并且对于每个MySql设置都要有value=\":memory:\"

稍后编辑

    
    
    
    
    
    
    
    

因此,您可以在上面找到PHPUnit中的相关代码。

.env

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=db1
DB_USERNAME=xxx
DB_PASSWORD=xxx
DB_HOST_2=127.0.0.1
DB_PORT_2=3306
DB_DATABASE_2=db2
DB_USERNAME_2=xxx
DB_PASSWORD_2=xxx
DB_HOST_2=127.0.0.1
DB_PORT_2=3306
DB_DATABASE_3=db3
DB_USERNAME_3=xxx
DB_PASSWORD_3=xxx

我遇到的问题是当我运行测试时,我有这个错误->PDOException: SQLSTATE[HY000] [1049] Unknown database \':memory:\'

因此,Laravel没有解析内存值。将不胜感激地接受任何建议。

谢谢

admin 更改状态以发布 2023年5月23日
0
0 Comments

很难解码实际上您放置了:memory:值。

在phpunit.xml的部分,这应该足够(假设您没有修改sqlite连接):


    
    

0
0 Comments

我有同样的问题,但是有一些Twitter上Adam Wathan的帮助,我让事情工作起来了。

以下是我的步骤:

phpunit.xml





config/database.php

'sqlite' => [
    'driver' => 'sqlite',
    'database' => env('DB_DATABASE', database_path('database.sqlite')),
    'prefix' => '',
],
'mysql' => [
    'driver' => env('DB_CONNECTION', 'mysql'),
    'host' => env('DB_HOST', '127.0.0.1'),
    'port' => env('DB_PORT', '3306'),
    'database' => env('DB_DATABASE', 'forge'),
    'username' => env('DB_USERNAME', 'forge'),
    'password' => env('DB_PASSWORD', ''),
    'unix_socket' => env('DB_SOCKET', ''),
    'charset' => 'utf8mb4',
    'collation' => 'utf8mb4_unicode_ci',
    'prefix' => '',
    'strict' => true,
    'engine' => null,
],
'mysql-activity-log' => [
    'driver' => env('DB_CONNECTION_ACTIVITY_LOG', 'mysql'),
    'host' => env('DB_HOST_ACTIVITY_LOG', '127.0.0.1'),
    'port' => env('DB_PORT_ACTIVITY_LOG', '3306'),
    'database' => env('DB_DATABASE_ACTIVITY_LOG', 'forge'),
    'username' => env('DB_USERNAME_ACTIVITY_LOG', 'forge'),
    'password' => env('DB_PASSWORD_ACTIVITY_LOG', ''),
    'unix_socket' => env('DB_SOCKET_ACTIVITY_LOG', ''),
    'charset' => 'utf8mb4',
    'collation' => 'utf8mb4_unicode_ci',
    'prefix' => '',
    'strict' => true,
    'engine' => null,
],

.env

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=my-app
DB_USERNAME=root
DB_PASSWORD=
DB_CONNECTION_ACTIVITY_LOG=mysql-activity-log
DB_HOST_ACTIVITY_LOG=127.0.0.1
DB_PORT_ACTIVITY_LOG=3306
DB_DATABASE_ACTIVITY_LOG=my-app
DB_USERNAME_ACTIVITY_LOG=root
DB_PASSWORD_ACTIVITY_LOG=

此外,对于还没有到达PDO异常点的任何人,请确保在您的迁移/模型中设置连接。

database/migrations/my_migration.php

Schema::connection(env('DB_CONNECTION_ACTIVITY_LOG', 'mysql'))->create(...);

app/MyModel.php

class MyModel extends Model
{
    public function __construct($attributes = [])
    {
        parent::__construct($attributes);
        $this->connection = config('app.env') === 'testing' ? 'sqlite' : 'mysql-activity-log';
    }
    ...
}

0