6 Stimmen

SecurityComponent blockiert meinen Controller-Testfall

Hier ist mein UsersController Testfall:

<?php
App::uses('UsersController', 'Controller');

class TestUsersController extends UsersController {

    public $autoRender = false;

    public function redirect($url, $status = null, $exit = true) {
        $this->redirectUrl = $url;
    }

    public function render($action = null, $layout = null, $file = null) {
        $this->renderedAction = $action;
    }

    public function _stop($status = 0) {
        $this->stopped = $status;
    }
}

class UsersControllerTestCase extends ControllerTestCase {

    public $fixtures = array('app.user');

    public function setUp() {
        parent::setUp();
        $this->Users = new TestUsersController();
        $this->Users->constructClasses();
    }

    public function tearDown() {
        unset($this->Users);

        parent::tearDown();
    }

    public function testAdminSearchStudents() {
        $data = array('User' => array('search' => 'Ipsum'));
        $result = $this->testAction('/admin', array('return' => 'vars', 'method' => 'post', 'data' => $data));
        $this->assertCount(1, $result['users']);
    }

}

Es gibt nichts Besonderes über meine UsersController, aber es verwendet die SecurityComponent (geerbt von AppController).

Und wenn ich die Tests durchführe, erhalte ich die berüchtigte:

Das Ersuchen wurde abgelehnt Testfall: UsersControllerTestCase(testAdminSearchStudents)

Ich denke, es ist, weil ich eine POST-Anfrage ohne das CSRF-Token und Verweis fälschen bin?

Was muss ich tun, damit das funktioniert? ohne die Komponente Sicherheit zu entfernen von meinem Controller?

Ich bin nicht sicher, ob das hilft, aber hier ist der wichtige Teil des Stacktrace:

/var/www/source/cakephp/lib/Cake/Controller/Component/SecurityComponent.php : 230
SecurityComponent::startup
/var/www/source/cakephp/lib/Cake/Utility/ObjectCollection.php : 130
ObjectCollection::trigger
/var/www/source/cakephp/lib/Cake/Event/CakeEventManager.php : 246
/var/www/source/cakephp/lib/Cake/Controller/Controller.php : 671
/var/www/source/cakephp/lib/Cake/Routing/Dispatcher.php : 183
/var/www/source/cakephp/lib/Cake/Routing/Dispatcher.php : 161
/var/www/source/cakephp/lib/Cake/TestSuite/ControllerTestCase.php : 271
ControllerTestCase::_testAction
/var/www/source/cakephp/lib/Cake/TestSuite/ControllerTestCase.php : 189

Mit freundlichen Grüßen

2voto

Thiago Belem Punkte 7662

Ich habe das Problem gelöst verhöhnend die SecurityComponent::_validatePost Methode:

$this->Users = $this->generate('Users', array(
    'components' => array(
        'Security' => array('_validatePost'),
    )
));

Inspiriert durch Der Umgang mit der Sicherheitskomponente in einem CakePHP 2 Testfall

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X