无法在EcomDev PHPUnit测试中获取会话单例

时间:2013-01-30 19:44:19

标签: unit-testing magento testing phpunit

经过一些严肃的调试后,我发现在使用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']索引未设置而导致

配置中是否存在导致此问题的错误?

2 个答案:

答案 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>