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:
CallCenter catches Exception, not Throwable
Call class requires an ?Exception in the constructor, not Throwable.
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.