Test delle pagine di configurazione con AbstractBackendController: testAclNoAccess ha esito negativo


10

Sto scrivendo un test di integrazione per una sezione di configurazione e ho riscontrato il seguente errore dai casi di test predefiniti:

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

A mio avviso, tutto funziona come dovrebbe, ma Magento invia una risposta di reindirizzamento invece di "Proibito" quando l'accesso è negato in una sezione di configurazione.

Ha senso cambiare il test per aspettarsi un codice di stato 302? Preferirei non rimuovere quel test in quanto mi ha già aiutato a individuare un identificatore di risorsa errato.

Questo è il codice pertinente:

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

Risposte:


3

Ha senso cambiare il test per aspettarsi un codice di stato 302?

Sì. Quanto segue sovrascrive l'implementazione predefinita per testAclNoAccess () e verifica che si verifichi un reindirizzamento quando si accede all'area di configurazione del sistema con autorizzazioni insufficienti.

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

Sto postando un follow-up, anche se sembra che sia meno correlato al problema, ma potrebbe aiutare me e gli altri. Ottengo lo stesso errore in un test del controller back-end:Failed asserting that 302 is identical to 403

Tuttavia, nel mio caso, questo errore viene generato in tutti i test di integrazione (!) Del mio core o dei miei moduli. Ho ristretto le cose al seguente fallimento del test:

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

Quindi, per qualche motivo, una volta spedito, la sessione si interrompe. Ho provato a riprodurlo su un altro ambiente, ma non ci sono riuscito: i test funzionano altrove, dimostrando che questo non si interrompe a causa di un codice di test errato, ma piuttosto di qualcosa nell'ambiente. Ho già seguito tutti i passaggi logici (scrivibile direttamente dalla sessione, usando invece Redis, altre impostazioni di sessione e cookie, cambiando PHP) ma non l'ho ancora risolto.

Volevo pubblicare questo, perché potrebbe essere che altri stiano riscontrando lo stesso errore, mentre non è correlato al test stesso, ma all'ambiente stesso.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.