经过一些严肃的调试后,我发现在使用EcomDev_PHPUnit模块运行测试时,我无法调用在Magento中获取会话对象
任何单例/模型调用,即Mage::getSingleton('admin/session')
或Mage::getModel('customer/session')
最终都会引发EcomDev_PHPUnit_Controller_Request_Http::getHttpHost()
的{{1}}异常,说Cannot run controller test, because the host is not set for base url.
因为$_SERVER['HTTP_HOST']
索引未设置而导致
配置中是否存在导致此问题的错误?
答案 0 :(得分:13)
这是与Magento会话初始化相关的问题,它是Magento的内部核心部分。为了摆脱这个错误,就是使用一个模拟对象,它不使用标准的Magento会话初始化过程,因为它使用了核心的php会话。
如果您已经从一个EcomDev_PHPUnit_Test_Case类扩展了测试用例,则可以使用以下代码替换使用mock的会话对象。
$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);
答案 1 :(得分:0)
您可以在phpunit.xml中设置主机
<phpunit ....>
...
<php>
<server name='HTTP_HOST' value='http://local.mysite.com' />
</php>
</phpunit>