Сторінки тестування конфігурації за допомогою 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 () та перевіряється, чи відбувається перенаправлення під час доступу до області System Config з недостатніми дозволами.

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), але це ще не вирішено.

Я хотів опублікувати це, тому що, можливо, інші відчувають таку ж помилку, хоча це стосується не самого тесту, а самого середовища.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.