Shopware 6插件单元测试无法找到自定义repository服务问题求助
问题根因
Shopware 6 测试环境默认不会自动加载自定义插件的服务定义,你当前的配置仅引入了核心测试引导文件,没有触发你的插件的服务注册逻辑,才会出现自定义repository服务不存在的报错。
解决方案
- 测试类必须继承Shopware官方提供的插件测试基类
不要使用原生PHPUnit的TestCase,改为继承Shopware\Core\Testbench\TestCase,并重写getSupportedPlugins方法主动注册你的插件,示例代码如下:
protected function getSupportedPlugins(): array { return array_merge(parent::getSupportedPlugins(), [ // 替换为你自己的插件类路径、根目录和技术名称 new \MyPluginNamespace\MyPlugin(true, __DIR__ . '/../../../', 'MyPluginTechnicalName') ]); }同时可以在
phpunit.xml.dist的<php>块中增加数据库同步配置,确保自定义实体结构能被测试环境识别:<env name="SHOPWARE_DB_STRATEGY" value="force"/>- 测试类必须继承Shopware官方提供的插件测试基类
- 先在test环境完成插件的安装激活
跑测试前先执行以下命令,确保你的插件在测试环境下处于激活状态,否则内核不会加载插件的服务定义:
bin/console plugin:install --activate MyPluginTechnicalName --env=test- 先在test环境完成插件的安装激活
- 核对实体定义和服务配置
确认你的实体定义中entityName设置正确,Shopware会自动为每个合法的自定义实体生成ID为{entityName}.repository的服务,检查你调用的服务ID和实体定义的entityName是否匹配,同时确认插件的Resources/config/services.xml路径和配置规则没有错误。
- 核对实体定义和服务配置
- 可选:修复PHPUnit配置警告(不影响服务加载)
你当前配置文件用的是PHPUnit7的schema,和你使用的PHPUnit9版本不匹配,执行以下命令即可自动更新配置文件消除警告:
./bin/phpunit.sh --migrate-configuration- 可选:修复PHPUnit配置警告(不影响服务加载)
内容的提问来源于stack exchange,提问作者Ezycod
相关产品推荐
相关产品推荐

