You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

配置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:配置测试环境独立参数

  1. 在项目根目录的.env.test文件中添加测试环境专属MongoDB配置,覆盖开发环境参数:
MONGODB_URL=mongodb://127.0.0.1:27017
MONGODB_DB=database_test # 自定义测试库名称,和开发库区分
  1. 新建测试环境专属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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 17:24:03