2017-03-01 1 views
1

Je déclenche un événement depuis mon contrôleur et je veux affirmer qu'il est déclenché dans le IntegrationTestCase. J'ai essayé d'utiliser la méthode assertEventFired() mais je reçois une erreur:Est-il possible d'utiliser IntegrationTestCase pour assertEventFired?

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

Je ne vois pas comment je peux obtenir une instance du contrôleur pour faire $controller->eventManager()->setEventList(new EventList()); pour permettre le suivi des événements.

Est-il possible de faire cela avec IntegrationTestCase ou ai-je besoin de construire le contrôleur manuellement comme cela est fait dans la suite de tests de base pour Cake\Controller\Controller?

CakePHP 3.3.15

Répondre

1

Vous pouvez accéder au contrôleur dans une méthode IntegrationTestCase::controllerSpy() surchargée, et après la demande a été envoyée, le contrôleur sera disponible via $this->_controller dans votre méthode d'essai aussi. Vous pouvez également compter sur le gestionnaire d'événements global, étant donné qu'il devrait y avoir un seul contrôleur par demande. Cela nécessiterait cependant également que les noms d'événements soient uniques, car il n'est pas possible de restreindre davantage l'origine de l'événement en utilisant assertEventFired(), ce qui n'est donc pas une très bonne solution. Cependant, pour l'amour de l'achèvement, voici un exemple pour cela aussi.

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

    // ... 

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

Voir aussi