在用于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中以编程方式创建命名空间?
答案 0 :(得分:2)
<body>
<div id='gameSynopsis'>
</div>
<div id="gameArea" lang='en'>
<div id="output">
<span id="outputMessage">Some text here</span>
<span id="aiThinkingIndicator" class="loading hide"></span>
</div>
<div id="fileNotation" class="boardLabel">
ABCDEFGH
</div>
<div id="rankNotation" class="boardLabel">
87654321
</div>
<div id="boardAndInfo">
<div id="board">
<canvas id="chessboard" width="600" height="600"></canvas>
<canvas id="highlight" width="600" height="600"></canvas>
<canvas id="chesspieceCanvas" width="600" height="600">
<p id='canvasSupportMsg'></p>
</canvas>
</div>
<fieldset id="gameInfo">
<legend id='gameInfoTitle'>Stuff</legend>
</fieldset>
</div>
</div>
</body>
对于改变全局变量的部分并不是很有用;您可以改为使用setMwGlobals
,或使用mergeMwGlobalArrayValue
使测试自动恢复旧值,然后手动更改。此外,您必须确保旧值不存储在任何位置 - 在请求初始化生命周期的早期查找名称空间,并且它们包含各种不便宜的东西(比如运行钩子以获取动态定义的命名空间,并获取翻译)被缓存。遗憾的是,没有任何方法可以检查缺少尝试以及查看调用树并查看值来自何处。 (MediaWiki正在逐渐转向基于依赖注入的体系结构,其中测试可以更好地控制应用程序的状态,但还没有完全控制。)
具体来说,你可以做点什么
stashMwGlobals