Как избежать перенаправления на страницу «Включить куки» во время теста на контроллер?
-
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> (Обнаружение возможностей браузера) перенаправление на CMS-PAGE, если файлы cookie отключены
Этот параметр также может быть установлен во время тестов, используя конфигурацию.
Другие советы
Я полагаю, что этот ответ переполненного потока поможет:
https://stackoverflow.com/questions/14612349/cant-get-session-singleton-in-ecomdev-phpunit-test
Основная идея состоит в том, чтобы издеваться над сеансом, чтобы ваше действие «Добавить в корзину» было успешным, а не перенаправляется на страницу «Отключенные файлы cookie».
$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);