Search code examples
drupalprophecy

Only this and nothing more with Prophecy?


So I have this in a PhpUnit test:

$alias_manager = $this->prophesize(AliasManagerInterface::class);
$alias_manager->cacheClear($source)->shouldBeCalledTimes(1);

And I would like to tell Prophecy that this is all the alias manager should be called with, no other methods should be called nor this method with any other argument. The latter I can do

$alias_manager->cacheClear(Argument::any())->shouldBeCalledTimes(1);

but how do I say "nothing else" for Prophecy?


Solution

  • With Prophecy, if you call reveal() on the object prophet immediately, the object is assumed to be a dummy object. This means that it'll return null for all public methods of the object it's prophesizing.

    However, as soon as you add one method prophet (e.g. by doing your shouldBeCalled...() call or a willReturn() call), the returned object will be a mock or a stub object. In this case, only the configured calls will work and all other calls that are executed will trigger failure.

    In other words: You don't have to do anything, this is the standard behaviour.