2017-03-01 12 views
1

Ich feuere ein Ereignis von meinem Controller und ich möchte behaupten, dass es in der IntegrationTestCase gefeuert wird. Ich versuchte, die assertEventFired() Methode, aber ich erhalte eine Fehlermeldung:Ist es möglich, IntegrationTestCase zu AssertEventFired zu verwenden?

The event manager you are asserting against is not configured to track events.

Ich sehe nicht, wie ich eine Instanz des Controllers erhalten kann $controller->eventManager()->setEventList(new EventList()); zu tun Event-Tracking zu ermöglichen.

Ist es möglich, dies mit IntegrationTestCase zu tun, oder muss ich den Controller manuell erstellen, wie es in der Kern-Test-Suite für Cake\Controller\Controller getan wird?

cakephp 3.3.15

Antwort

1

Sie Zugriff auf den Controller in einem überschriebenen IntegrationTestCase::controllerSpy() Verfahren gewinnen kann, und nachdem die Anforderung versendet wurde, wird die Steuerung über $this->_controller in Ihrem Testmethode auch zur Verfügung stehen.

Sie könnten sich möglicherweise auch auf den globalen Ereignismanager verlassen, da nur ein Controller pro Anfrage vorhanden sein sollte.

Das würde aber auch erfordern, dass die Ereignisnamen eindeutig sind, da es nicht möglich ist, den Ursprung des Ereignisses mit assertEventFired() weiter einzuschränken, also ist das keine allzu gute Lösung. Um dies zu vervollständigen, hier ein Beispiel dafür.

public function someTest() 
{ 
    $eventList = new \Cake\Event\EventList(); 
    \Cake\Event\EventManager::instance()->setEventList($eventList); 

    // ... 

    $this->assertEventFired('someEvent'); 
} 

Siehe auch

Verwandte Themen