Doctrine Symfony 4.1内核测试用例存储库连接异常
我正在跟随symfony docs()尝试根据MySQL数据库测试我的存储库类。 相关代码部分如下所示:Doctrine Symfony 4.1内核测试用例存储库连接异常,doctrine,phpunit,symfony4,connectionexception,Doctrine,Phpunit,Symfony4,Connectionexception,我正在跟随symfony docs()尝试根据MySQL数据库测试我的存储库类。 相关代码部分如下所示: class ProductRepositoryTest extends KernelTestCase { /** * @var \Doctrine\ORM\EntityManager */ private $entityManager; /** * {@inheritDoc} */ protected function
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执行testclass时,我得到一个条令\DBAL\Exception\ConnectionException,并显示以下消息:“驱动程序中发生异常:用户'root'@'localhost'(使用密码:否)的SQLSTATE[HY000][1045]访问被拒绝”
我将数据库连接数据存储在.env文件的database_URL中,执行:bin/console原则:migrations:migrate时,连接工作正常
但是这个配置似乎没有用于测试(因为在.env文件中“NO”不是我的密码)。我是否必须将连接配置存储在另一个文件中进行测试?如果是,我必须在哪里存储配置,以便在我的测试用例中使用它
提前感谢您的帮助 文件
.env
仅在dev
环境中使用。如果您在prod
或test
中,它甚至不被读取:。这在文档的某些部分很清楚,但在其他一些部分则不那么清楚,这可能会让人困惑
在您的情况下,您可以检查
config
文件夹,更具体地说可能是在config/packages/doctrine.yaml
和config/packages/parameters.yaml
下,并查看数据库URL
是如何使用的(如果存在)。从那里,您可以在特定于test
环境的配置文件中硬编码该URL(例如,在config/packages
下创建一个test
子文件夹),或者您可以使用APP\u ENV=…&&bin/phpunit…
以下是第一个场景中的解决方案:
# config/packages/test/doctrine.yaml
doctrine:
dbal:
url: 'mysql://db_user:db_password@127.0.0.1:3306/db_name'
我刚试过,效果很好,非常感谢!!:)