经过一些认真的调试后,我发现在使用 EcomDev_PHPUnit 模块运行测试时,我无法在 Magento 中调用以获取 session 对象
任何单例/模型调用,即 Mage::getSingleton('admin/session')
或 Mage::getModel('customer/session')
最终会抛出异常从 EcomDev_PHPUnit_Controller_Request_Http::getHttpHost()
说 Cannot run controller test, because the host is not set for base url.
这是因为 $_SERVER['HTTP_HOST ']
未设置索引
配置中是否有我可能遗漏的东西导致此问题?
最佳答案
这是与Magento session 初始化相关的问题,是Magento 的内部核心部分。为了摆脱这个错误是使用一个模拟对象,它不使用标准的 Magento session 初始化过程,因为它使用核心 php session 。
如果您从 EcomDev_PHPUnit_Test_Case 类之一扩展了测试用例,则可以使用以下代码用 mock 替换 session 对象。
$sessionMock = $this->getModelMockBuilder('admin/session')
->disableOriginalConstructor() // This one removes session_start and other methods usage
->setMethods(null) // Enables original methods usage, because by default it overrides all methods
->getMock();
$this->replaceByMock('singleton', 'admin/session', $sessionMock);
关于unit-testing - 无法在 EcomDev PHPUnit 测试中获取 session 单例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14612349/