Tip #10: Broken Translations
It happens that translations are not working in unit tests if you replace a helper with a mocked helper, using mockHelper()
and replaceByMock()
, especially in developer mode where translations only work if defined for the right module.
The module name is determined in Mage_Core_Helper_Abstract
by $this->_getModuleName()
, so let’s look into this method:
/** * 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; }
If your helper class is Your_Awesome_Helper_Data
, the mocked helper class will actually be Mock_Your_Awesome_Helper_Data
. As a module named Mock_Your_Awesome
doesn’t exist, nothing can be translated.
Solution
To make your helpers unit test proof (and as a side effect also rewrite proof), define _moduleName
explicitly:
class Your_Awesome_Helper_Data extends Mage_Core_Helper_Abstract { protected $_moduleName = 'Your_Awesome'; }
First described here: http://magento.stackexchange.com/questions/46255/ecomdev-phpunit-translation-not-working-with-mocked-helper
One Reply to “EcomDev PHPUnit Tip #10”
Comments are closed.