作者:手机用户2602898385 | 来源:互联网 | 2023-02-01 22:55
我正在开发一个具有多个数据库访问权限的应用程序,我想用这个进行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不知道解析内存值.任何建议都会受到赞赏.谢谢
1> Curtis Black..:
我遇到了同样的问题,但是我在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=
另外,对于任何不熟悉PDOException的人,也请确保在迁移/模型中设置连接。
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';
}
...
}