ترجمة EcomDev PHPUnit لا تعمل مع Mocked Helper
-
12-12-2019 - |
سؤال
لقد لاحظت أن الترجمات لا تعمل مع إطار عمل اختبار الوحدة EcomDev_PHPUnit إذا قمت باستبدال المساعد بمساعد مستهزئ، باستخدام mockHelper()
و replaceByMock()
.لا ينبغي أي استدعاء للطريقة غير الساخرة __()
تتصرف بنفس الطريقة مما كانت عليه في المساعد الأصلي؟
المحلول
طريقة الترجمة الأصلية __()
في الواقع يتم استدعاؤه، لكنه ينطوي على بعض "سحر".هذه هي الطريقة في Mage_Core_Helper_Abstract
:
/**
* Translate
*
* @return string
*/
public function __()
{
$args = func_get_args();
$expr = new Mage_Core_Model_Translate_Expr(array_shift($args), $this->_getModuleName());
array_unshift($args, $expr);
return Mage::app()->getTranslator()->translate($args);
}
يتم تحديد اسم الوحدة بواسطة $this->_getModuleName()
, ، لذلك دعونا ننظر في هذه الطريقة:
/**
* 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;
}
يحدد اسم الوحدة عن طريق تجريد أي شيء يبدأ من _Helper
خارج طريقتك (تخيل الأخطاء التي قد يسببها اسم الوحدة الذي يبدأ بـ "المساعد" ...)
ولكن إذا كانت فئة المساعد الخاصة بك هي Your_Awesome_Helper_Data
, ، ستكون فئة المساعد التي يتم الاستهزاء بها في الواقع Mock_Your_Awesome_Helper_Data
.كوحدة اسمها Mock_Your_Awesome
غير موجود، لا شيء يمكن ترجمته.
حل
لجعل مساعديك دليلًا على اختبار الوحدة، حدد _moduleName
صراحة:
class Your_Awesome_Helper_Data extends Mage_Core_Helper_Abstract
{
protected $_moduleName = 'Your_Awesome';
}