Yapılandırma sayfalarını AbstractBackendController ile test edin: testAclNoAccess başarısız


10

Bir yapılandırma bölümü için bir tümleştirme testi yazıyorum ve varsayılan sınama durumlarında aşağıdaki hatayla karşılaştım:

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

Gördüğüm kadarıyla, her şey olması gerektiği gibi çalışıyor, ancak Magento bir yapılandırma bölümünde erişim engellendiğinde "Yasak" yerine bir yönlendirme yanıtı gönderir.

302 durum kodu beklemek için testi değiştirmek mantıklı mı? Zaten yanlış bir kaynak tanımlayıcı yakalamak bana yardımcı olduğu için bu test durumda kaldırmak istemem.

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

Yanıtlar:


3

302 durum kodu beklemek için testi değiştirmek mantıklı mı?

Evet. Aşağıdakiler, testAclNoAccess () için varsayılan uygulamayı geçersiz kılar ve Sistem Yapılandırması alanına yetersiz izinlerle erişirken bir yönlendirme olup olmadığını denetler.

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

Konuyla daha az ilgili görünse de, bir takip gönderiyorum, ancak bana ve diğerlerine yardımcı olabilir. Bir arka uç denetleyici testinde aynı hatayı alıyorum:Failed asserting that 302 is identical to 403

Ancak, benim durumumda, bu hata, çekirdek veya kendi modüllerimin tüm (!) Entegrasyon testlerine atılır. İşleri aşağıdaki test başarısızlığına kadar daralttım:

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

Bu nedenle, bir nedenle, bir kez gönderildikten sonra oturum kesilir. Bunu başka bir ortamda çoğaltmaya çalıştım, ancak başarısız oldum: Testler başka bir yerde çalışıyor, bunun yanlış test kodu nedeniyle değil, ortamdaki bir şey nedeniyle kırıldığını kanıtlıyor. Zaten tüm mantıksal adımlardan geçtim (oturum diresi yazılabilir, bunun yerine Redis kullanarak, diğer oturum ve çerez ayarları, PHP'yi değiştirerek) ama henüz çözmedim.

Bunu göndermek istedim, çünkü testin kendisiyle değil, ortamın kendisiyle ilişkili olsa da, diğerleri aynı hatayı yaşıyor olabilir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.