gpt4 book ai didi

namespaces - 在 phpunit 测试中为 MediaWiki 扩展创建自定义命名空间

转载 作者:行者123 更新时间:2023-12-04 16:54:34 24 4
gpt4 key购买 nike

在 MediaWiki 扩展的 phpunit 测试中,我在创建自定义命名空间时遇到问题:

class NameSpaceTestCase extends \MediaWikiTestCase {
public function testCustomNameSpace() {
$ns = 4000;
$this->setMwGlobals( [
"wgExtraNamespaces[$ns]" => 'custom_namespace'
] );
// global $wgExtraNamespaces;
// $wgExtraNamespaces[$ns] = 'custom_namespace';
$this->insertPage( 'in custom namespace', 'This is a page in a custom namespace', $ns );
$this->assertTrue( MWNamespace::exists( $ns ), "The name space with id $ns should exist!" );
}
}

命名空间存在的断言(在最后一行代码中)失败。

当我取消注释当前注释的行(并注释对 setMwGlobals 的调用)时,它仍然失败。

如何以编程方式在 MediaWiki 中创建命名空间?

最佳答案

setMwGlobals对于更改全局变量的部分并不是很有用;您可以使用 mergeMwGlobalArrayValue相反,或使用 stashMwGlobals使测试自动恢复旧值,然后手动更改。另外,您必须确保旧值未存储在任何地方 - 在请求初始化生命周期的早期查找 namespace ,并且它们包括各种不那么便宜的东西(例如运行 Hook 以获取动态定义的 namespace 和获取翻译)所以倾向于被缓存。不幸的是,除了尝试和查看调用树并查看值的来源之外,实际上没有任何方法可以进行检查。 (MediaWiki 正在慢慢转向基于依赖注入(inject)的架构,在这种架构中,测试可以更好地控制应用程序的状态,但还没有完全实现。)

具体来说,你可以做类似的事情

class NameSpaceTestCase extends \MediaWikiTestCase {
public function testCustomNameSpace() {
global $wgContLang;
$ns = 4000;
$this->mergeMwGlobalArrayValue( 'wgExtraNamespaces', [
$ns => 'custom_namespace',
] );
MWNamespace::getCanonicalNamespaces( true ); // break namespace cache
$wgContLang->resetNamespaces(); // break namespace localization cache
$this->insertPage( 'in custom namespace', 'This is a page in a custom namespace', $ns );
$this->assertTrue( MWNamespace::exists( $ns ), "The name space with id $ns should exist!" );
}
}

关于namespaces - 在 phpunit 测试中为 MediaWiki 扩展创建自定义命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45974979/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com