在Mediauniki扩展的phpunit测试中创建自定义命名空间

时间:2017-08-31 06:49:48

标签: namespaces phpunit mediawiki-extensions

在用于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中以编程方式创建命名空间?

1 个答案:

答案 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