Here is a guide to upgrading a test suite or an extension, based on BC-breaking changes made in phpspec 3.
If you are using 3rd party phpspec extensions, you may have to increase the version numbers for those as well.
As PHP 5.5 and below are no longer supported language versions, you will need to upgrade to PHP 5.6 or 7.0+ to use phpspec 3.
Where you have used @param annotations for spec examples, to indicate the required type for a collaborator, you will need to remove these and use explicit typehinting in the method signature instead. For example:
/**
* @param \stdClass $collaborator
*/
function it_does_something_with_a_stdclass($collaborator)
Change to:
function it_does_something_with_a_stdclass(\stdClass $collaborator)
Extension configured in your phpspec.yml
needs to be changed from:
some_extension_config: foo
extensions:
- SomeExtension
- SomeOtherExtension
To:
extensions:
SomeExtension:
some_config: foo
SomeOtherExtension: ~
Several interfaces have been renamed in phpspec 3.0. Here is a quick guide to changes you will need to make in your code.
PhpSpec\Console\IO
is now PhpSpec\Console\ConsoleIO
PhpSpec\IO\IOInterface
is now PhpSpec\IO\IO
PhpSpec\Locator\ResourceInterface
is now PhpSpec\Locator\Resource
PhpSpec\Locator\ResourceLocatorInterface
is now
PhpSpec\Locator\ResourceLocator
PhpSpec\Formatter\Presenter\PresenterInterface
is now
PhpSpec\Formatter\Presenter\Presenter
PhpSpec\CodeGenerator\Generator\GeneratorInterface
is now
PhpSpec\CodeGenerator\Generator\Generator
PhpSpec\Extension\ExtensionInterface
is now PhpSpec\Extension
Phpspec\CodeAnalysis\AccessInspectorInterface
is now Phpspec\CodeAnalysis\AccessInspector
Phpspec\Event\EventInterface
is now Phpspec\Event\PhpSpecEvent
PhpSpec\Formatter\Presenter\Differ\EngineInterface
is now PhpSpec\Formatter\Presenter\Differ\DifferEngine
PhpSpec\Matcher\MatcherInterface
is now PhpSpec\Matcher\Matcher
PhpSpec\Matcher\MatchersProviderInterface
is now PhpSpec\Matcher\MatchersProvider
Some methods have a different signature:
PhpSpec\CodeGenerator\Generator\PromptingGenerator#__construct
‘s third and
fourth arguments are now mandatoryPhpSpec\Matcher\ThrowMatcher#__construct
‘s third argument is now mandatoryPhpSpec\Extension#load
has now an additional mandatory array $params
argument.A few methods have been renamed in phpspec 3.0:
PhpSpec\ServiceContainer#set
is now PhpSpec\ServiceContainer#define
PhpSpec\ServiceContainer#setShared
is now PhpSpec\ServiceContainer#define
Other things to bear in mind:
PhpSpec\ServiceContainer
is now an interface (available implementation:
PhpSpec\ServiceContainer\IndexedServiceContainer
)PhpSpec\ServiceContainer\ServiceContainer#getByPrefix
has been replaced by PhpSpec\ServiceContainer\ServiceContainer#getByTag
. Tags can be set via PhpSpec\ServiceContainer\ServiceContainer#define
‘s third argument