【问题标题】:Symfony 4 how to use database testSymfony 4如何使用数据库测试
【发布时间】:2019-05-19 12:36:46
【问题描述】:

我已经为这个函数创建了一个测试:

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")

【问题讨论】:

  • 如果我很了解测试,您通常应该使用具有不同配置、服务...文件(例如 .yaml 或 .xml)的不同环境(“测试”)。

标签: php unit-testing symfony symfony4


【解决方案1】:

为了使用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"

【讨论】:

    猜你喜欢
    • 2018-11-14
    • 2013-01-08
    • 1970-01-01
    • 1970-01-01
    • 2014-11-10
    • 2013-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多