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"