我正在使用非常简单的控制器测试 Ecomdev_PHPUnit:

class Foo_BarWishlist_Test_Controller_IndexController 
    extends EcomDev_PHPUnit_Test_Case_Controller
{

    /**
     * @test
     * @loadFixture ~Foo_BarWishlist/default
     */
    public function fromcartAction()
    {
        $this->dispatch('checkout/cart/add', array('product' => 10));
        $this->assertRequestDispatched();
        $body = self::getResponse()->getOutputBody();
        $this->assertResponseBodyContains('success-msg');
    }

  ...

该测试失败了,因为 $body 是空的。检查时 self::getResponse() 更接近,我发现重定向到 enable-cookies CMS页面已发送。

我该如何照顾这个?我必须手动设置核克吗?我必须在另一页之前打开另一页(我已经尝试了 $this->dispatch('/') 在实际调度之前)?还是在控制器测试期间有一般的cookie问题?

有帮助吗?

解决方案

管理面板中有一个设置:

web>(浏览器功能检测)如果禁用了cookie,请重定向到CMS页面

也可以在测试期间使用配置夹具设置此设置。

其他提示

我相信这个堆栈溢出答案会有所帮助:
https://stackoverflow.com/questions/14612349/cant-get-session-singleton-in-ecomdev-phpunit-test

基本想法是嘲笑会话,然后您的“添加到购物车”动作成功,而不是重定向到“ cookie disabled”页面。

$sessionMock = $this->getModelMockBuilder('admin/session')

    // This one removes `session_start` and other methods
    ->disableOriginalConstructor()

    // Enables original methods usage, because by default it overrides all methods
    ->setMethods(null)

    ->getMock();

$this->replaceByMock('singleton', 'admin/session', $sessionMock);
许可以下: CC-BY-SA归因
scroll top