Как избежать перенаправления на страницу "включить файлы 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 во время тестов контроллера?

Author: 7ochem, 2013-02-11

2 answers

Для этого есть настройка в панели администратора:

Веб> (Определение возможностей браузера) Перенаправление на CMS-страницу, если файлы cookie отключены

Этот параметр также можно установить во время тестов с помощью приспособления конфигурации.

 3
Author: Jan Tomka, 2013-04-25 09:55:12

Я верю, что этот ответ на переполнение стека будет 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);
 1
Author: runamok, 2017-05-23 12:37:14