Я обновил Doctrine 2.5 до 2.6 в своем проекте, и phpspec не работает.
Функция getEntityChangeSet() теперь возвращается по ссылке. Кажется, это не поддерживается phpspec.
$unitOfWork
->getEntityChangeSet($site)
->willReturn(['_dataParent' => [0 => 2, 1 => 3]]);
Ответ
returning by reference not supported
базовая функция (учение / доктрина2)
public function & getEntityChangeSet($entity)
{
$oid = spl_object_hash($entity);
$data = [];
if (!isset($this->entityChangeSets[$oid])) {
return $data;
}
return $this->entityChangeSets[$oid];
}
Вы знаете, можно ли обойти этот тест или изменить его, чтобы заставить его работать?
@SenseException: упомянутая функция является кодом поставщика: github.com/doctrine/doctrine2/blob/master/lib/Doctrine/ORM/…






Ответ дал в Твиттере @Pamilme
Вы должны издеваться над UnitOfWork с помощью Mockery. Пример можно найти здесь:
/** @var UnitOfWork|MockInterface $unitOfWork */
$unitOfWork = Mockery::mock(UnitOfWork::class);
$unitOfWork->shouldReceive('getEntityChangeSet')->withArgs([$productAttribute->getWrappedObject()])->andReturn([
'configuration' => [
['choices' => [
'8ec40814-adef-4194-af91-5559b5f19236' => 'Banana',
'1739bc61-9e42-4c80-8b9a-f97f0579cccb' => 'Pineapple',
]],
['choices' => [
'8ec40814-adef-4194-af91-5559b5f19236' => 'Banana',
]],
],
]);
$entityManager->getUnitOfWork()->willReturn($unitOfWork);
Почему по ссылке?