When a mocked method throws a `Throwable` the call to the method is not recorded
Author: BladeMFCreated Apr 8, 2023Updated Feb 21, 2026
Given this code:
$this->prophesize(Publisher::class)
->processChanges($interval)
->shouldBeCalled()
->willThrow(new TypeError())
->getObjectProphecy()
->reveal();when the processChanges method is called, it throws the specified TypeError, but the call is not recorded.
The reason for this are that:
CallCentercatchesException, notThrowableCallclass requires an?Exceptionin the constructor, notThrowable.
IMO it is a perfectly valid assumption that a piece of code can cause a type error. It's not often, but it is a valid case specifically with generated code. I checked that if I just change Exception to Throwable in the two places, it works. Not sure if that breaks some other cases though.
Source: phpspec/prophecy