我正在关注symfony文档(https://symfony.com/doc/current/testing/doctrine.html),以针对我的MySQL数据库测试存储库类。 相关的代码部分是这样的:
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并显示以下消息:“驱动程序中发生异常:SQLSTATE [HY000] [1045]用户'root'@'localhost'的访问被拒绝(使用密码:否)”。
我将数据库连接数据存储在.env文件的DATABASE_URL中,并且在执行以下操作时连接正常:bin / console doctrine:migrations:migrate
但是似乎此配置未用于测试(因为'.env'不是我在.env文件中的密码)。我是否必须将连接配置存储在另一个文件中进行测试?如果是的话,我必须在哪里存储配置,以便在我的测试用例中使用它?
在此先感谢您的帮助!
答案 0 :(得分:3)
.env
文件仅在dev
环境中使用。如果您在prod
或test
中,甚至都不会显示为:https://symfony.com/doc/current/configuration.html#the-env-file-environment-variables。在文档的某些部分中很明显,但在其他一些部分中却很少,这可能会造成混淆。
以您的情况为例,您可以检查config
文件夹,更具体地说是检查config/packages/doctrine.yaml
和config/packages/parameters.yaml
下的文件夹,并查看DATABASE_URL
的使用方式(如果存在) 。从那里,您可以在特定于test
环境的配置文件中对该URL进行硬编码(例如,在test
下创建config/packages
子文件夹),或者可以给正确的{{1} }使用DATABASE_URL
“手动”将环境变量设置为phpunit
。
这是第一种情况下的解决方案:
APP_ENV=... && bin/phpunit ...