Laravel多数据库PHPUnit
Laravel多数据库PHPUnit
这个问题已经在这里得到了答案:
我正在开发一个具有多个数据库访问的应用程序,并希望使用PHPUnit测试。我目前的方法是在config\\databases.php
中有多个连接(mysql、mysql2、mysql3),因此我可以在env文件中为它们每个人设置不同的访问。因此,模型具有定义$connection
变量。在我的第一个功能测试中,我想访问一个页面,只看到我在工厂中提供的数据,这样才能开始做事。在我的phpunit.xml
文件中,我已经指定了DB_CONNECTION
为sqlite
,并且对于每个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日
我有同样的问题,但是有一些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'; } ... }