0
在PHPUnit測試一個鏈接到MediaWiki擴展,我無法創建一個自定義命名空間PHPUnit的測試創建自定義命名空間失敗。在鏈接到MediaWiki擴展
當我取消對當前註釋行的註釋(並且改爲將其註釋爲setMwGlobals
),它仍然失敗。
如何以編程方式在MediaWiki中創建名稱空間?
在PHPUnit測試一個鏈接到MediaWiki擴展,我無法創建一個自定義命名空間PHPUnit的測試創建自定義命名空間失敗。在鏈接到MediaWiki擴展
當我取消對當前註釋行的註釋(並且改爲將其註釋爲setMwGlobals
),它仍然失敗。
如何以編程方式在MediaWiki中創建名稱空間?
setMwGlobals
對於更改全局變量的部分並不是很有用;您可以使用mergeMwGlobalArrayValue
代替,或使用stashMwGlobals
使測試自動恢復舊值,然後手動更改。另外,您必須確保舊值不會存儲在任何位置 - 命名空間在請求初始化生命週期的早期被查找,並且它們包含各種不便宜的事情(如運行獲取動態定義的命名空間的鉤子以及獲取翻譯)被緩存。不幸的是,沒有任何方法可以檢查缺少嘗試和查看調用樹並查看價值來自哪裏。具體來說(鏈接到MediaWiki慢慢走向依賴注入基礎架構,測試必須在應用程序的狀態更多的控制移動,但還沒有應用。)
,你可以這樣做
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!");
}
}
添加'[...]'到變量名的末尾沒有任何用處。您需要'$ this-> mergeMwGlobalArrayValue('wgExtraNamespaces',[$ ns =>'custom_namespace'])' – Tgr
可能命名空間在測試運行時已被緩存。你可以調用'MWNamespace :: getCanonicalNamespaces(true)'來重建緩存。 – Tgr
謝謝@Tgr,這就是解決方案:使用'mergeMwGlobalArrayValue'後跟'MWNamespace :: getCanonicalNamespaces(true)'。你想添加這個答案嗎?然後我可以將其標記爲已解決。 – bovender