Symfony 4.1 KernelTestCase Repository ConnectionException



我正在遵循symfony文档(https://symfony.com/doc/current/testing/doctrine.html(试图针对我的MySQL数据库测试我的存储库类。 相关的代码部分是这样的:

class ProductRepositoryTest extends KernelTestCase
{
/**
* @var DoctrineORMEntityManager
*/
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,并显示消息:"驱动程序中发生异常:SQLSTATE[HY000] [1045] 用户'root'@'localhost'(使用密码:NO(的访问被拒绝"。

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

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

提前感谢任何帮助!

.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

下面是第一种情况下的解决方案:

# config/packages/test/doctrine.yaml
doctrine:
dbal:
url: 'mysql://db_user:db_password@127.0.0.1:3306/db_name'

相关内容

  • 没有找到相关文章

最新更新