Seit Jahren ist das Test-Framework
EcomDev_PHPUnit quasi-Standard für Magento Unit Tests. Die aktuelle Version ist 0.3.7 und der letzte Stand der offiziellen Dokumentation ist Version 0.2.0 – seitdem hat sich viel getan, was man leider im Code und GitHub Issues selbst zusammensuchen muss. Diese Serie soll praktische Tipps zur Verwendung sammeln.
Tipp #10: Defekte Übersetzungen
Es kann passieren, dass Übersetzungen in Unit Tests nicht funktionieren, wenn man einen Helper mit einem Helper-Mock ersetzt (mit mockHelper()
und replaceByMock()
), insbesondere im Developer Mode, wo Übersetzungen nur funktionieren wenn sie für das richtige Modul definiert wurden.
Der Modulname wird in Mage_Core_Helper_Abstract
mit $this->_getModuleName()
ermittelt, also schauen wir uns die Methode einmal an:
/**
* Retrieve helper module name
*
* @return string
*/
protected function _getModuleName()
{
if (!$this->_moduleName) {
$class = get_class($this);
$this->_moduleName = substr($class, 0, strpos($class, '_Helper'));
}
return $this->_moduleName;
}
Wenn Deine Helper Klasse Your_Awesome_Helper_Data
ist, wird die Klasse des Helper-Mocks Mock_Your_Awesome_Helper_Data
heißen. Weil ein Modul namens Mock_Your_Awesome
nicht existiert, gibt es keine Übersetzungen.
Lösung
Um Helper Unit-Test-sicher zu machen (und als Nebeneffekt auch Rewrite-sicher), definiere _moduleName
explizit:
class Your_Awesome_Helper_Data extends Mage_Core_Helper_Abstract
{
protected $_moduleName = 'Your_Awesome';
}
Zuerst beschrieben hier: http://magento.stackexchange.com/questions/46255/ecomdev-phpunit-translation-not-working-with-mocked-helper