如何避免在控制器单元测试期间重定向到“启用烹饪”页面?
-
16-10-2019 - |
题
我正在使用非常简单的控制器测试 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);