A typical Developer Blog
by Gordon Franke
Icon

Wie kann ich user attribute in meinem Functional test überschreiben?

Manch mal hängt der code von einem user attribute ab, also will man das user attribute in seinem functional test überschreiben.

Das Problem ist das die doCall Methode in der sfBrowser Klasse den context neuerstellt und am ende die shutdown Methode für den user und die storage Objekte , zum schreiben der Session daten, aufruft.

Also muss man seine eigene Browser Klasse erstellen und die doCall Methode überschreiben und den code an den Anfang verschieben.

Browser Klasse:

class myBrowser extends sfBrowser
{
  /**
   * Calls a request to a uri.
   */
  protected function doCall()
  {
    // manually shutdown user to save current session data
    if (isset($this->context) AND $this->context->getUser())
    {
      $this->context->getUser()->shutdown();
      $this->context->getStorage()->shutdown();
    }
 
    // recycle our context object
    $this->context = $this->getContext(true);
 
    sfConfig::set('sf_test', true);
 
    // we register a fake rendering filter
    sfConfig::set('sf_rendering_filter', array('sfFakeRenderingFilter', null));
 
    $this->resetCurrentException();
 
    // dispatch our request
    ob_start();
    $this->context->getController()->dispatch();
    $retval = ob_get_clean();
 
    // append retval to the response content
    $this->context->getResponse()->setContent($retval);
  }
}

Test code:

include dirname(__FILE__).'/../../bootstrap/functional.php';
 
$browser = new sfTestFunctional(new myBrowser());
 
$browser->
  get('/site-one');
 
// override the session data
$browser->getUser()->setAttribute('key', $value);
 
$browser->
  get('/site-one');

No related posts.

Ähnliche Artikel bereitgestellt von Yet Another Related Posts Plugin.

Author:

Category: symfony, Uncategorized

Tagged: , , , , ,

2 Responses

  1. Ronino sagt:

    Vielen Dank, das hat mir den Tag gerettet, nachdem ich schon seit Stunden versucht habe herauszufinden, wie ich in einem funktionalen Test einen Nutzer per sfGuardSecurityUser::signin() einloggen kann, da meine Action einen solchen voraussetzt. Der Nutzer war zwar im Test eingeloggt, aber nicht in der Action. Jetzt funktioniert’s, dankeschön!

  2. David sagt:

    Thanks a lot, wouldn’t have come up with that solution by myself!

Leave a Reply

CommentLuv badge