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

Silverstripe测试中Element类controller_class配置无法正常注入问题

问题根本原因

Silverstripe 测试上下文默认不会自动扫描实现了TestOnly接口的类的静态配置,你本地执行的dev/build和清理web缓存的操作针对的是正常web访问的运行环境,和测试环境的配置栈完全隔离,所以不会生效。

可行解决方案

  • 方案1:将测试类注册到测试的额外数据对象清单
    在你的测试类NestedElementForms中添加$extra_dataobjects属性,声明需要加载的TestOnly类,测试运行器会自动扫描这些类的静态配置:
class NestedElementForms extends FunctionalTest {
    protected static $fixture_file = 'NestedElementFormsFixture.yml';
    // 新增这一行,替换为你实际的类命名空间
    protected static $extra_dataobjects = [
        MockFormElement::class
    ];

    /**
     * @test
     */
    public function submitFormOnElement() {
        $this->assertEquals(MockFormElementController::class, MockFormElement::config()->controller_class, 'Injection failed');
    }
}
  • 方案2:在setUp方法中手动覆盖配置(优先级最高,最稳妥)
    直接在测试初始化的时候手动设置配置值,不受配置加载逻辑影响:
class NestedElementForms extends FunctionalTest {
    protected static $fixture_file = 'NestedElementFormsFixture.yml';

    protected function setUp(): void
    {
        parent::setUp();
        // 手动设置配置
        MockFormElement::config()->set('controller_class', MockFormElementController::class);
    }

    /**
     * @test
     */
    public function submitFormOnElement() {
        $this->assertEquals(MockFormElementController::class, MockFormElement::config()->controller_class, 'Injection failed');
    }
}

内容的提问来源于stack exchange,提问作者David Peck

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 06:42:00