【发布时间】:2017-08-31 06:49:47
【问题描述】:
在 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 中创建命名空间?
【问题讨论】:
-
将
[...]添加到变量名的末尾没有任何用处。你会想要$this->mergeMwGlobalArrayValue( 'wgExtraNamespaces', [ $ns => 'custom_namespace' ] ) -
可能在测试运行时命名空间已被缓存。你可以调用
MWNamespace::getCanonicalNamespaces( true )重建缓存。 -
感谢@Tgr,这就是解决方案:使用
mergeMwGlobalArrayValue,后跟MWNamespace::getCanonicalNamespaces( true )。您想将此添加为答案吗?然后我可以将其标记为已解决。 -
虽然命名空间创建得很好,但我现在面临
$this->insertPage( 'page in custom namespace', 'page content', $ns );没有创建有效页面的问题:当我执行print_r ( $page, true )时,我得到[mPrefixedText:protected] => Special:Badtitle/NS4000:In custom namespace并且单元测试失败.扩展代码适用于生产环境中的命名空间,因此它必须是单元测试所固有的。 -
更多缓存,可能吗?试试
$wgContLang->resetNamespaces()。
标签: namespaces phpunit mediawiki-extensions