我想在 Symfony 中进行一些单元测试,并尝试测试已经可以工作的东西,如下所示:
<?php namespace App\Tests\Api\Controller;
use Symfony\Component\HttpFoundation\Request;
use App\Controller\Admin\ProductAdminController;
use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;
/**
* Class ProductsAdminControllerTest
* @package App\Tests\Api\Controller
*/
class ProductsAdminControllerTest extends WebTestCase
{
protected function setUp()
{
$kernel = static::createKernel();
$kernel->boot();
static::$container = $kernel->getContainer();
/*$this->_em = $kernel->getContainer()->get('doctrine.orm.entity_manager');
$this->_em->beginTransaction();*/
}
public function testSearchProductsEmpty()
{
$request = new Request([], [
"product_name" => ""
]);
$controller = new ProductsAdminController();
$controller->setContainer(static::$container);
$controller->getProducts($request);
//$products = json_decode($controller->getProducts($request));
$this->assertEquals(1, 1);
}
}
当然,在我克服当前的问题后,这将被修改,即无论我做什么,我都会得到错误
Doctrine\DBAL\Exception\ConnectionException: An exception occurred in driver: SQLSTATE[HY000] [1045] Access denied for user 'db_user'@'localhost' (using password: YES)
当然,我的开发环境连接的数据库具有不同的凭据,我想确保我的单元测试使用相同的凭据。如何实现这一目标?
最佳答案
如果您想针对不同的环境使用不同的连接参数,可以通过在 config/packages/{env}/doctrine.yaml 中创建文件来覆盖配置
为了进行测试,您可以创建 config/packages/test/doctrine.yaml
doctrine:
dbal:
# configure these for your database server
url: 'mysql://db_user4test:db_password4test@host4test:3306/dbname4test'
phpunit 将使用此配置。
否则您可以创建 .env.test 并覆盖配置 ( Customizing Database URL / Environment Variables )
[编辑] @LajosArpad 建议的另一种方法是添加 phpunit.xml.dist:
<env name="DATABASE_URL" value="mysql://db_user4test:db_password4test@host4test:3306/dbname4test" />
关于mysql - 如何确保单元测试 Doctrine 尝试加载到与开发相同的数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57963365/