diff --git a/src/Codeception/Module/Symfony.php b/src/Codeception/Module/Symfony.php index 463e2994..d87ac9be 100644 --- a/src/Codeception/Module/Symfony.php +++ b/src/Codeception/Module/Symfony.php @@ -1262,6 +1262,41 @@ public function seeEventTriggered($expected): void } } + /** + * Make sure events did not fire during the test. + * + * ``` php + * dontSeeEventTriggered('App\MyEvent'); + * $I->dontSeeEventTriggered(new App\Events\MyEvent()); + * $I->dontSeeEventTriggered(['App\MyEvent', 'App\MyOtherEvent']); + * ``` + * @param string|object|string[] $expected + */ + public function dontSeeEventTriggered($expected): void + { + /** @var EventDataCollector $eventCollector */ + $eventCollector = $this->grabCollector('events', __FUNCTION__); + + /** @var Data $data */ + $data = $eventCollector->getNotCalledListeners(); + + $actual = $data->getValue(true); + $expected = is_array($expected) ? $expected : [$expected]; + + foreach ($expected as $expectedEvent) { + $notTriggered = false; + $expectedEvent = is_object($expectedEvent) ? get_class($expectedEvent) : $expectedEvent; + + foreach ($actual as $actualEvent) { + if (strpos($actualEvent['pretty'], $expectedEvent) === 0) { + $notTriggered = true; + } + } + $this->assertTrue($notTriggered, "The '$expectedEvent' event triggered"); + } + } + /** * Checks that current page matches action *