我正在跟踪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,其中包含以下消息:“驱动程序中发生了异常:用户'root'@'localhost‘(使用密码:NO)被拒绝的SQLSTATEHY000访问”。
我将我的数据库连接数据存储在DATABASE_URL中的.env文件中,当执行:bin/控制台原则:迁移:迁移时,连接工作正常。
但是这个配置似乎不用于测试(因为'NO‘不是我在.env文件中的密码)。是否必须将连接配置存储在另一个文件中以进行测试?如果是,我必须将配置存储在哪里,以便在我的测试用例中使用它?
提前感谢您的帮助!
发布于 2018-09-24 17:09:16
.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 (例如,在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'https://stackoverflow.com/questions/52483919
复制相似问题