Mock built-in PHP functions (e.g. time()) with Prophecy (phpspec).
This package integrates the function mock library
PHP-Mock with Prophecy.
Use Composer:
composer require --dev php-mock/php-mock-prophecy
Build a new PHPProphet
and create function prophecies for a given namespace
with PHPProphet::prophesize()
:
namespace foo;
use phpmock\prophecy\PHPProphet;
$prophet = new PHPProphet();
$prophecy = $prophet->prophesize(__NAMESPACE__);
$prophecy->time()->willReturn(123);
$prophecy->reveal();
assert(123 == time());
$prophet->checkPredictions();
This library comes with the same restrictions as the underlyingphp-mock
:
Only unqualified function calls in a namespace context can be prophesized.
E.g. a call for time()
in the namespace foo
is prophesizable,
a call for \time()
is not.
The mock has to be defined before the first call to the unqualified function
in the tested class. This is documented in Bug #68541.
In most cases you can ignore this restriction. But if you happen to run into
this issue you can call PHPProphet::define()
before that first call. This would define a side effectless namespaced function.
Additionally it shares restrictions from Prophecy as well:
Prophecy doesn’t support pass-by-reference.
If you need pass-by-reference in prophecies, consider using another framework
(e.g. php-mock-phpunit).
This project is free and under the WTFPL.
Responsable for this project is Markus Malkusch markus@malkusch.de.
If you like this project and feel generous donate a few Bitcoins here:
1335STSwu9hST4vcMRppEPgENMHD2r1REK