Tes halaman konfigurasi dengan AbstractBackendController: testAclNoAccess gagal

10

Saya sedang menulis tes integrasi untuk bagian konfigurasi dan mengalami kegagalan berikut dari kasus uji default:

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

Sejauh yang saya lihat, semuanya berfungsi sebagaimana mestinya, tetapi Magento mengirimkan respons pengalihan alih-alih "Terlarang" ketika akses ditolak pada bagian konfigurasi.

Apakah masuk akal untuk mengubah tes untuk mengharapkan kode status 302? Saya lebih suka tidak menghapus test case karena sudah membantu saya menangkap pengidentifikasi sumber daya yang salah.

Ini adalah kode yang relevan:

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]
}
Fabian Schmengler
sumber

Jawaban:

3

Apakah masuk akal untuk mengubah tes untuk mengharapkan kode status 302?

Iya. Di bawah ini menimpa implementasi default untuk testAclNoAccess () dan memeriksa bahwa pengalihan terjadi ketika mengakses area System Config dengan izin yang tidak mencukupi.

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());
}
Kristof di Fooman
sumber
1

Saya memposting tindak lanjut, meskipun tampaknya itu kurang terkait dengan masalah ini, tetapi mungkin membantu saya dan orang lain. Saya mendapatkan kesalahan yang sama dalam tes pengendali backend:Failed asserting that 302 is identical to 403

Namun, dalam kasus saya, kesalahan ini dilemparkan pada semua tes integrasi (!) Baik inti atau modul saya sendiri. Saya mempersempit hal-hal sebagai gagal tes berikut:

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

Jadi, untuk beberapa alasan, setelah dikirim, sesi istirahat. Saya sudah mencoba untuk mereproduksi ini di lingkungan lain, tetapi gagal: Tes bekerja di tempat lain, membuktikan bahwa ini bukan karena kesalahan kode pengujian, tetapi sesuatu di lingkungan sebagai gantinya. Saya sudah melalui semua langkah logis (dir sesi dapat ditulis, menggunakan Redis sebagai gantinya, pengaturan sesi dan cookie lainnya, beralih PHP) tetapi belum menyelesaikan ini.

Saya ingin memposting ini, karena mungkin orang lain mengalami kesalahan yang sama, sementara itu tidak terkait dengan tes itu sendiri, tetapi lingkungan itu sendiri.

Jisse Reitsma
sumber