Kiểm tra các trang cấu hình với AbstractBackendControll: testAclNoAccess không thành công


10

Tôi đang viết một bài kiểm tra tích hợp cho phần cấu hình và gặp phải lỗi sau từ các trường hợp kiểm tra mặc định:

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

Theo như tôi thấy, mọi thứ đều hoạt động như bình thường, nhưng Magento sẽ gửi phản hồi chuyển hướng thay vì "Bị cấm" khi quyền truy cập bị từ chối trên phần cấu hình.

Liệu nó có ý nghĩa để thay đổi thử nghiệm để mong đợi một mã trạng thái 302? Tôi thà không loại bỏ trường hợp thử nghiệm đó vì nó đã giúp tôi bắt được một định danh tài nguyên sai.

Đây là mã có liên quan:

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

Câu trả lời:


3

Liệu nó có ý nghĩa để thay đổi thử nghiệm để mong đợi một mã trạng thái 302?

Đúng. Dưới đây ghi đè cài đặt mặc định cho testAclNoAccess () và kiểm tra xem chuyển hướng có xảy ra khi truy cập vào khu vực Cấu hình hệ thống với không đủ quyền.

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

Tôi đang đăng một bài theo dõi, mặc dù có vẻ như nó ít liên quan đến vấn đề này, nhưng nó có thể giúp tôi và những người khác. Tôi gặp lỗi tương tự trong bài kiểm tra bộ điều khiển phụ trợ:Failed asserting that 302 is identical to 403

Tuy nhiên, trong trường hợp của tôi, lỗi này được đưa ra trong tất cả các thử nghiệm tích hợp (!) Của lõi hoặc mô-đun của riêng tôi. Tôi đã thu hẹp mọi thứ xuống để kiểm tra thất bại sau đây:

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

Vì vậy, vì một số lý do, một khi được gửi đi, phiên nghỉ. Tôi đã cố gắng tái tạo điều này trên một môi trường khác, nhưng không thành công: Các thử nghiệm hoạt động ở nơi khác, chứng minh rằng điều này bị phá vỡ không phải do mã kiểm tra sai, mà là một cái gì đó trong môi trường thay thế. Tôi đã trải qua tất cả các bước hợp lý (thư mục phiên có thể ghi, thay vào đó sử dụng Redis, các cài đặt cookie và phiên khác, chuyển đổi PHP) nhưng chưa giải quyết được vấn đề này.

Tôi muốn đăng bài này, vì có thể những người khác đang gặp lỗi tương tự, trong khi nó không liên quan đến bản thân bài kiểm tra, mà chính là môi trường.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.