2016-06-06 12 views
0

ich die folgenden Basen lass für Controller-Tests habe:WebTestCase nicht nach Silex 2 Upgrade

public function createApplication() { 
    include __DIR__ . '../web/index_dev.php'; 

    $app['debug'] = true; 
    $app['session.test'] = true; 
    $app['helper'] = function ($app) { 
      return new TestHelper($app); 
    }; // fails!! 

    return $app; 
    } 

    public function setUp() { 
    parent::setUp(); 

    $this->client = parent::createClient(); 
} 

Bei Silex 1.3 es funktionierte gut, aber nach dem Upgrade für v2 es an den markierten Linie versagt. Sobald ich es kommentiere - alles ist in Ordnung.

UPD # 1: Ich habe herausgefunden, warum es fehlschlägt: Cannot override frozen service "helper". Ich verstehe die Bedeutung von Fehler, kann aber nicht verstehen, wie es zu beheben ist. Es ist ein Testfall, also muss ich es durch Mock-/Testimplementierung des Gegenstandes ersetzen, aber kann nicht.

Antwort

0

Ihr Problem ist die Aufrüstung des Pimple Behälters. The Pimple version of Silex 2 freezes services once you get them.

Ihr Problem ist also, dass Sie den "Hilfsdienst" zuvor auf Ihrem Code erhalten. Sie sollten Ihren Code so umgestalten, dass Sie den Dienst beim Booten Ihrer Anwendung nicht erhalten.

+1

Hallo, vielen Dank für Ihre Antwort. Eigentlich habe ich es schon, Frage ist - wie Event-Listener wie '$ app-> error' oder' $ app-> vorher umgestaltet werden? Dies ist Teil des Startvorgangs. Welche Best Practices für die Neudefinition von Objekten während der Tests gibt es außerdem? – nKognito

+0

Ich würde entscheiden, verschiedene Konfigurationsdateien abhängig von der Umgebung (dev, prod, test) zu haben. Definieren Sie die Umgebung frühzeitig und konfigurieren Sie dann die darauf basierenden Dienste wie das offizielle [Silex-Skelett] (https://github.com/silexphp/silex-skeleton). – mTorres

Verwandte Themen