Тестировать страницы конфигурации с помощью AbstractBackendController: testAclNoAccess завершается неудачно

10

Я пишу интеграционный тест для раздела конфигурации и обнаружил следующую ошибку в стандартных тестовых случаях:

My\Module\ConfigTest::testAclNoAccess
Failed asserting that 302 is identical to 403

Насколько я вижу, все работает как надо, но Magento отправляет ответ о перенаправлении вместо «Запрещено», когда доступ запрещен в разделе конфигурации.

Имеет ли смысл сменить тест на код состояния 302? Я бы предпочел не удалять этот контрольный пример, поскольку он уже помог мне поймать неправильный идентификатор ресурса.

Это соответствующий код:

namespace My\Module;

use Magento\TestFramework\TestCase\AbstractBackendController;

class ConfigTest extends AbstractBackendController
{

    protected function setUp()
    {
        parent::setUp();
        $this->uri = 'backend/admin/system_config/edit';
        $this->resource = 'My_Module::config_my_module';
        $this->getRequest()->setParam('section', 'my_module');
    }

    // [other tests]
}
Фабиан Шменглер
источник

Ответы:

3

Имеет ли смысл сменить тест на код состояния 302?

Да. Ниже приводится переопределение реализации по умолчанию для testAclNoAccess () и проверка того, что перенаправление происходит при доступе к области конфигурации системы с недостаточными разрешениями.

public function testAclNoAccess()
{
    $this->_objectManager->get('Magento\Framework\Acl\Builder')
        ->getAcl()
        ->deny(null, $this->resource);
    $this->dispatch($this->uri);

    //denied access in the system config redirects
    $this->assertTrue($this->getResponse()->isRedirect());
}
Кристоф в Фуман
источник
1

Я отправляю продолжение, хотя кажется, что оно менее связано с проблемой, но может помочь мне и другим. Я получаю ту же ошибку в тесте бэкэнд-контроллера:Failed asserting that 302 is identical to 403

Однако в моем случае эта ошибка возникает во всех (!) Интеграционных тестах ядра или моих собственных модулей. Я сузил дело до следующего провала теста:

$this->assertTrue($this->_session->isLoggedIn());
$this->dispatch($this->uri);
$this->assertTrue($this->_session->isLoggedIn(), 'Session is no longer valid');

Итак, по какой-то причине после отправки сеанс прерывается. Я пытался воспроизвести это в другой среде, но потерпел неудачу: тесты работают в другом месте, доказывая, что это ломается не из-за неправильного кода тестирования, а из-за чего-то в среде. Я уже прошел все логические этапы (запись в директорию сеанса, использование Redis вместо этого, другие настройки сеанса и cookie, переключение PHP), но пока не решил эту проблему.

Я хотел опубликовать это, потому что может случиться так, что другие люди испытывают ту же ошибку, хотя это связано не с самим тестом, а с самой средой.

Джисс Рейтсма
источник