配置Symfony 5.3使用专用MongoDB数据库执行PHPUnit测试
解决方案
你遇到的问题核心是文档注解中硬编码了数据库名,优先级高于全局配置的default_database,导致无论环境配置如何,数据都会写入固定的database_local库,以下是完整修复步骤:
步骤1:修复文档注解的硬编码配置
优先推荐移除@ODM\Document注解中硬编码的db参数,让文档自动使用当前环境的默认数据库配置:
<?php namespace App\Document; use App\Document\EstablishmentDateStoreDocument; use App\Document\GroupDocument; use Doctrine\ODM\MongoDB\Mapping\Annotations as ODM; use Symfony\Component\Uid\Uuid; /** * 移除硬编码的db参数 * @ODM\Document(collection="establishment",repositoryClass=EstablishmentRepository::class) * */ class EstablishmentDocument { /** * @ODM\Id(type="string") */ private $id; /** * @ODM\Field(type="string") */ private string $uuid; // 剩余代码
如果确实需要保留注解中的db参数配置,可将值改为环境变量引用:db="%env(resolve:MONGODB_DB)%",同样可以实现随环境动态切换。
步骤2:配置测试环境独立参数
- 在项目根目录的
.env.test文件中添加测试环境专属MongoDB配置,覆盖开发环境参数:
MONGODB_URL=mongodb://127.0.0.1:27017 MONGODB_DB=database_test # 自定义测试库名称,和开发库区分
- 新建测试环境专属Doctrine配置文件
config/packages/test/doctrine_mongodb.yaml,覆盖全局配置:
doctrine_mongodb: auto_generate_proxy_classes: false auto_generate_hydrator_classes: false default_database: '%env(resolve:MONGODB_DB)%'
步骤3:确认执行环境参数
- 加载测试fixture时必须指定测试环境,否则默认走开发环境:
php bin/console doctrine:mongodb:fixtures:load --env=test - 确认
phpunit.xml.dist中已强制指定测试环境,避免运行PHPUnit时加载开发配置:
<php> <server name="APP_ENV" value="test" force="true"/> <!-- 其余phpunit配置 --> </php>
生效验证
修改完成后先清空测试环境缓存:php bin/console cache:clear --env=test
重新加载fixture即可看到数据写入你配置的独立测试库。
内容的提问来源于stack exchange,提问作者Louloutte
相关产品推荐
相关产品推荐

