5

经过一些认真的调试后,我发现在使用 EcomDev_PHPUnit 模块运行测试时,我无法调用以获取 Magento 中的会话对象

任何单例/模型调用,即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']未设置索引而引起的

配置中是否有我可能缺少的东西导致这种情况?

4

2 回答 2

13

这是一个与 Magento 会话初始化相关的问题,它是 Magento 的内部核心部分。为了摆脱这个错误是使用一个模拟对象,它不使用标准的 Magento 会话初始化过程,因为它使用核心 php 会话。

如果您已从 EcomDev_PHPUnit_Test_Case 类之一扩展了您的测试用例,则可以使用以下代码来使用模拟替换会话对象。

$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);
于 2013-01-30T19:53:53.180 回答
0

您可以在 phpunit.xml 中设置主机

<phpunit ....>
    ...
    <php>
        <server name='HTTP_HOST' value='http://local.mysite.com' />
    </php>
</phpunit>
于 2016-08-15T17:45:00.403 回答