Baike.dev
All toolsAI codingTrendingOpen sourceNewsSubmit
Log in
Back to tool/Back to issues
#595·prophecy

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:

php
$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:

  1. CallCenter catches Exception, not Throwable
  2. 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.

Source: phpspec/prophecy

View original on GitHubView discussion on GitHub