Symfony4:Doctrine2 可以工作,但在 PHPUnit 测试中没有连接(内核启动)

问题描述 投票:0回答:2

Symfony4 中的奇怪问题:Doctrine 有效,我可以使用

php bin/console doctrine:schema:create
验证模式、创建数据库等。但我的PHPUnit测试没有连接。通过运行
./bin/phpunit
我得到
SQLSTATE[HY000] [2002] No such file or directory
异常。

我按照文档中有关启动内核的步骤进行操作: http://symfony.com/doc/current/testing/doctrine.html

我的代码:

class PersistingResultTest extends KernelTestCase
{
    protected $em;

    protected function setUp()
    {
        $kernel = self::bootKernel();

        $this->em = $kernel->getContainer()
            ->get('doctrine')
            ->getManager();
    }

    public function testPersistingLogFile()
    {
        // Just a simple schema command to test connection
        $tool = new SchemaTool($this->em);
        $tool->createSchema($this->em->getMetadataFactory()->getAllMetadata());
    }


   protected function tearDown()
    {
        parent::tearDown();

        $this->em->close();
        $this->em = null; // avoid memory leaks
    }
}

有人知道为什么会发生这种情况吗?一个错误?

编辑:

显然

.env
文件没有正确读取。我将
DATABASE_URL
环境变量移至
doctrine.yml
文件中,现在它可以工作了。

php symfony doctrine-orm symfony4
2个回答
8
投票

您必须将

DATABASE_URL
放入您的
phpunit.xml
文件中,例如像这样:

<php>
        <ini name="error_reporting" value="-1" />
        <env name="KERNEL_CLASS" value="App\Kernel" />
        <env name="APP_ENV" value="test" />

        <!-- ###+ doctrine/doctrine-bundle ### -->
        <!-- Format described at http://docs.doctrine-project.org/projects/doctrine-dbal/en/latest/reference/configuration.html#connecting-using-a-url -->
        <!-- For an SQLite database, use: "sqlite:///%kernel.project_dir%/var/data.db" -->
        <!-- Configure your db driver and server_version in config/packages/doctrine.yaml -->
        <env name="DATABASE_URL" value="mysql://[email protected]:3306/symfony4-database"/>
        <!-- ###- doctrine/doctrine-bundle ### -->
    </php>

0
投票

对我来说,我必须在

DATABASE_URL
文件中取消注释虚拟
.env
。它被注释掉了,因为它在
.env.local
文件中被覆盖,并且有人认为它是多余的。

© www.soinside.com 2019 - 2024. All rights reserved.