AbstractBackendController를 사용하여 구성 페이지 테스트 : testAclNoAccess 실패 중이며 기본 테스트 사례에서 다음과 같은 오류가

구성 섹션에 대한 통합 테스트를 작성 중이며 기본 테스트 사례에서 다음과 같은 오류가 발생했습니다.

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

내가 알기로는 모든 것이 제대로 작동하지만 Magento는 구성 섹션에서 액세스가 거부되면 “Forbidden”대신 리디렉션 응답을 보냅니다.

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


답변

302 상태 코드를 예상하도록 테스트를 변경하는 것이 합리적입니까?

예. 아래는 testAclNoAccess ()의 기본 구현을 무시하고 권한이 충분하지 않은 시스템 구성 영역에 액세스 할 때 리디렉션이 발생하는지 확인합니다.

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());
}

답변

문제와 관련이없는 것처럼 보이지만 후속 조치를 게시하고 있지만 나와 다른 사람들에게 도움이 될 수 있습니다. 백엔드 컨트롤러 테스트에서 동일한 오류가 발생합니다.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 대신 다른 세션 및 쿠키 설정 사용, PHP 전환)를 이미 수행했지만 아직 해결하지 못했습니다.

테스트 자체와 관련이 없지만 환경 자체와 관련이 있지만 다른 사람들이 동일한 오류를 겪을 수 있기 때문에 이것을 게시하고 싶었습니다.