使用AbstractBackendController测试配置页面:testAclNoAccess失败


10

我正在为配置部分编写集成测试,并且在默认测试用例中遇到以下失败:

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

Answers:


3

更改测试以获取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());
}

1

我正在发布后续消息,即使它似乎与问题的相关性较小,但它可能对我和其他人有所帮助。我在后端控制器测试中遇到相同的错误: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');

因此,由于某种原因,一旦调度,会话就会中断。我试图在另一个环境上重现此错误,但是失败了:测试在其他地方都可以进行,证明这不会因为错误的测试代码而失败,而是因为环境中的某些错误。我已经完成了所有逻辑步骤(可写的会话dir,使用Redis替代,其他会话和cookie设置,切换PHP),但尚未解决。

我想发布此消息,因为它可能是其他人遇到相同的错误,尽管它与测试本身无关,但与环境本身相关。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.