Как избежать перенаправления на страницу "включить файлы cookie" во время тестирования контроллера?
Я провожу очень простой тест контроллера с использованием 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()
я вижу, что было отправлено перенаправление на страницу CMS enable-cookies
.
Как я могу об этом позаботиться? Должен ли я устанавливать контрольный файл cookie вручную? Нужно ли мне открывать другую страницу раньше (я уже пробовал $this->dispatch('/')
перед фактической отправкой)? Или есть общая проблема с файлами cookie во время тестов контроллера?
2 answers
Для этого есть настройка в панели администратора:
Веб> (Определение возможностей браузера) Перенаправление на CMS-страницу, если файлы cookie отключены
Этот параметр также можно установить во время тестов с помощью приспособления конфигурации.
Я верю, что этот ответ на переполнение стека будет help:
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);