Testuj strony konfiguracji za pomocą AbstractBackendController: testAclNoAccess kończy się niepowodzeniem


10

Piszę test integracji dla sekcji konfiguracji i napotkałem następujący błąd z domyślnych przypadków testowych:

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

O ile widzę, wszystko działa tak, jak powinno, ale Magento wysyła odpowiedź przekierowania zamiast „Zabronione”, gdy odmowa dostępu w sekcji konfiguracji.

Czy sensowna jest zmiana testu, aby oczekiwać kodu stanu 302? Wolę nie usuwać tego przypadku testowego, ponieważ już pomógł mi on złapać zły identyfikator zasobu.

To jest odpowiedni kod:

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]
}

Odpowiedzi:


3

Czy sensowna jest zmiana testu, aby oczekiwać kodu stanu 302?

Tak. Poniżej zastępuje domyślną implementację testAclNoAccess () i sprawdza, czy nastąpi przekierowanie podczas uzyskiwania dostępu do obszaru konfiguracji systemu z niewystarczającymi uprawnieniami.

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

Wysyłam kolejne, choć wydaje się, że jest to mniej związane z tym problemem, ale może pomóc mi i innym. Otrzymuję ten sam błąd w teście kontrolera zaplecza:Failed asserting that 302 is identical to 403

Jednak w moim przypadku ten błąd jest zgłaszany we wszystkich (!) Testach integracyjnych zarówno rdzenia, jak i własnych modułów. Zawęziłem sprawę do następującego testu zakończonego niepowodzeniem:

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

Z jakiegoś powodu sesja po wysłaniu ulega zerwaniu. Próbowałem odtworzyć to w innym środowisku, ale nie powiodło się: testy działają gdzie indziej, udowadniając, że psuje się nie z powodu złego kodu testowego, ale coś w środowisku. Przeszedłem już wszystkie logiczne kroki (zapis sesji do zapisu, użycie Redis zamiast, inne ustawienia sesji i plików cookie, przełączanie PHP), ale jeszcze tego nie rozwiązałem.

Chciałem to opublikować, ponieważ być może inni doświadczają tego samego błędu, chociaż nie jest to związane z samym testem, ale z samym środowiskiem.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.