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

Shopware 6单元测试中无法从容器获取插件服务

问题原因与解决方案

你的测试代码无法获取第三方插件服务的核心原因是:当前测试环境默认仅加载Shopware核心服务与你正在测试的自定义插件,目标第三方插件并未被启用,因此它的服务没有注册到容器中。

具体解决步骤

1. 在测试中显式启用第三方插件

在测试类的setUp方法或目标测试方法中,调用IntegrationTestBehaviour提供的enablePlugins方法,显式加载目标第三方插件:

protected function setUp(): void
{
    parent::setUp();
    // 替换为第三方插件的主类名
    $this->enablePlugins([ThirdPartyPlugin::class]);
}

或者直接在测试方法内启用:

public function testConfirmPageSubscriber(): void
{
    $this->enablePlugins([ThirdPartyPlugin::class]);
    $container = $this->getKernel()->getContainer();
    $customDataService = $container->get(CustomDataService::class);
    // 后续测试逻辑
}

2. 确认服务的可访问性

如果启用插件后仍报错,检查第三方插件的服务配置:

  • 若服务在XML中被声明为private="true",测试环境下无法直接通过get()获取,可临时在插件的services_test.xml中将其设为public="true",或者通过依赖注入的方式注入到测试类中。
  • 确认服务类的命名空间完全正确,避免因类名拼写错误导致找不到服务。

3. 确保测试Kernel加载插件配置

如果是Shopware 6.x版本,确保你的测试Kernel(通常是TestKernel)在构建时包含了第三方插件的配置。可以在tests/bootstrap.php中检查是否有加载第三方插件的逻辑,或者通过$this->getKernel()->getPluginLoader()确认插件已被加载。

内容的提问来源于stack exchange,提问作者Claudio Ferraro

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 21:30:52