Symfony 4 如何使用数据库测试
Symfony 4 how to use database test
我已经为这个函数创建了一个测试:
public function userRegistrationDatabase(String $email, String $keyRockId): object
{
$entityManager = $this->getDoctrine()->getManager("gui");
$user = new User();
$user->setUserName($email);
$user->setEmail($email);
$user->setEnabled(true);
$userRole = ['ROLE_USER','ROLE_ADMIN'];
$user->addRole(implode(",",$userRole));
$user->setKeyrockId($keyRockId);
$entityManager->persist($user);
$entityManager->flush();
return $user;
}
我还创建了一个仅用于测试目的的 sqlite 数据库。问题是:在测试期间如何切换要使用的数据库?这是测试:
public function testUserRegistrationDatabase()
{
$userManager = self::$kernel->getContainer()
->get('test.'. UserManagement::class);
$mail = 'notexistinguser@mail.com';
$keyRockId = '45091fd63a1';
$user = $userManager->userRegistrationDatabase($mail,$keyRockId);
}
我想使用的数据库是:
self::$kernel->getContainer()
->get('doctrine')
->getManager('test_gui');
所以基本上函数使用 getManager("gui")
但在测试中我想使用 getManager("test_gui")
.
为了使用getManager("test_gui")
,您需要使用该名称定义一个数据库连接。在 Symfony 3 中,这样的配置可能如下所示:
../app/config.yml
(参见docs):
...
doctrine
connections:
...
test_gui:
driver: pdo_sqlite
path: %kernel.root_dir%/cache/test/test.sqlite
Symfony 4 中有类似的配置(参见docs):
../config/packages/doctrine.yaml
:
...
doctrine:
dbal:
default_connection: default
connections:
default:
# configure these for your database server
url: '%env(DATABASE_URL)%'
driver: 'pdo_mysql'
server_version: '5.7'
charset: utf8mb4
test_gui:
# configure these for your database server
url: '%env(DATABASE_TEST_URL)%'
driver: 'pdo_sqlite'
其中 DATABASE_TEST_URL
可能是 "sqlite:///%kernel.root_dir%/cache/test/test.sqlite"
我已经为这个函数创建了一个测试:
public function userRegistrationDatabase(String $email, String $keyRockId): object
{
$entityManager = $this->getDoctrine()->getManager("gui");
$user = new User();
$user->setUserName($email);
$user->setEmail($email);
$user->setEnabled(true);
$userRole = ['ROLE_USER','ROLE_ADMIN'];
$user->addRole(implode(",",$userRole));
$user->setKeyrockId($keyRockId);
$entityManager->persist($user);
$entityManager->flush();
return $user;
}
我还创建了一个仅用于测试目的的 sqlite 数据库。问题是:在测试期间如何切换要使用的数据库?这是测试:
public function testUserRegistrationDatabase()
{
$userManager = self::$kernel->getContainer()
->get('test.'. UserManagement::class);
$mail = 'notexistinguser@mail.com';
$keyRockId = '45091fd63a1';
$user = $userManager->userRegistrationDatabase($mail,$keyRockId);
}
我想使用的数据库是:
self::$kernel->getContainer()
->get('doctrine')
->getManager('test_gui');
所以基本上函数使用 getManager("gui")
但在测试中我想使用 getManager("test_gui")
.
为了使用getManager("test_gui")
,您需要使用该名称定义一个数据库连接。在 Symfony 3 中,这样的配置可能如下所示:
../app/config.yml
(参见docs):
...
doctrine
connections:
...
test_gui:
driver: pdo_sqlite
path: %kernel.root_dir%/cache/test/test.sqlite
Symfony 4 中有类似的配置(参见docs):
../config/packages/doctrine.yaml
:
...
doctrine:
dbal:
default_connection: default
connections:
default:
# configure these for your database server
url: '%env(DATABASE_URL)%'
driver: 'pdo_mysql'
server_version: '5.7'
charset: utf8mb4
test_gui:
# configure these for your database server
url: '%env(DATABASE_TEST_URL)%'
driver: 'pdo_sqlite'
其中 DATABASE_TEST_URL
可能是 "sqlite:///%kernel.root_dir%/cache/test/test.sqlite"