首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Symfony 4.1 KernelTestCase仓库ConnectionException

Symfony 4.1 KernelTestCase仓库ConnectionException
EN

Stack Overflow用户
提问于 2018-09-24 16:45:40
回答 1查看 328关注 0票数 1

我正在跟踪symfony (https://symfony.com/doc/current/testing/doctrine.html),试图根据我的MySQL数据库测试我的存储库类。有关的代码部分是:

代码语言:javascript
复制
class ProductRepositoryTest extends KernelTestCase
{
    /**
     * @var \Doctrine\ORM\EntityManager
     */
    private $entityManager;

    /**
     * {@inheritDoc}
     */
    protected function setUp()
    {
        $kernel = self::bootKernel();

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

    public function testSearchByCategoryName()
    {
        $products = $this->entityManager
            ->getRepository(Product::class)
            ->searchByCategoryName('foo')
        ;

        $this->assertCount(1, $products);
    }

    /**
     * {@inheritDoc}
     */
    protected function tearDown()
    {
        parent::tearDown();

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

当我使用PhpUnit执行测试类时,我会得到一个Doctrine\DBAL\ exception \ConnectionException,其中包含以下消息:“驱动程序中发生了异常:用户'root'@'localhost‘(使用密码:NO)被拒绝的SQLSTATEHY000访问”。

我将我的数据库连接数据存储在DATABASE_URL中的.env文件中,当执行:bin/控制台原则:迁移:迁移时,连接工作正常。

但是这个配置似乎不用于测试(因为'NO‘不是我在.env文件中的密码)。是否必须将连接配置存储在另一个文件中以进行测试?如果是,我必须将配置存储在哪里,以便在我的测试用例中使用它?

提前感谢您的帮助!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-24 17:09:16

.env文件仅在dev环境中使用。如果您在prodtest,它甚至没有读到:https://symfony.com/doc/current/configuration.html#the-env-file-environment-variables。这在文档的某些部分很明显,但在另一些部分则更少,这可能会让人感到困惑。

在您的例子中,您可以检查您的config文件夹,更具体地说,可能在config/packages/doctrine.yamlconfig/packages/parameters.yaml下,查看如何使用DATABASE_URL (当它存在时)。从这里,您可以在特定于test环境的配置文件中硬编码该URL (例如,在config/packages下创建一个test子文件夹),也可以通过使用APP_ENV=... && bin/phpunit ...“手动”将正确的DATABASE_URL环境变量交给phpunit

以下是第一个场景中的解决方案:

代码语言:javascript
复制
# config/packages/test/doctrine.yaml
doctrine:
  dbal:
    url: 'mysql://db_user:db_password@127.0.0.1:3306/db_name'
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52483919

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档