Функциональные тесты Symfony2 + фиксации доктрины: изменения в сущности не сохранятся после сброса в фиксации доктрины

Я столкнулся с проблемой при выполнении креплений для моих функциональных тестов в Symfony 2.6. В этом приспособлении у меня есть функция для создания базовой сущности и ее сброса в базу данных. Затем я вызываю эту функцию из других функций, которые изменяют вновь созданную сущность на что-то более сложное (например, устанавливают отношения с другими сущностями), а затем снова сбрасываю.

Однако, когда я проверяю базу данных, второй сброс не вносит изменений в сущность.

Я попытался отладить, и я вижу, что UnitOfWork не содержит ничего, запланированного для вставки / обновления до второго сброса, хотя я выполняю функции set …. ().

Ты хоть представляешь, что я делаю не так?

Вот выдержка из моего приспособления:

class LoadTestApplications extends AbstractFixture implements OrderedFixtureInterface
{
const APPLICATION_ID_NOT_SUBMITTED_VALID = 37;

public function load(ObjectManager $manager)
{
//other lines ommitted

$this->loadNotSubmittedValidApplication($manager);

//other lines ommited
}

private function loadNotSubmittedValidApplication(ObjectManager $manager)
{
$application = $this->createAndGetFilledApplication($manager, self::APPLICATION_ID_NOT_SUBMITTED_VALID,
'property-property-empty', 'GROUP_INSTALLER', 'application-application-not-submitted-valid',
'person-default', 'person-default', 'person-default', 'person-default');

/** @var Installer $installer */
$installer = $this->getReference('installer-installer1');

/** @var InstallerContractor $installerContractor */
$installerContractor = $this->getReference('installer-installer-contractor1');

$application->setInstaller($installer);
$installer->addApplication($application);

$application->setInstallerContractor($installerContractor);
$installerContractor->addApplication($application);

$manager->persist($installer);
$manager->persist($installerContractor);
$manager->persist($application);
$manager->flush(); // this saves no changes
}

private function createAndGetFilledApplication(ObjectManager $manager, $applicationId, $propertyReference,
$acg, $referenceName, $contactReference, $improverReference, $billPayerReference, $propertyOwnerReference)
{
$application = new Application();
$application->setId($applicationId);

// lots of other set...() functions


// that's for forcing our own ID on the entity, so we can force only
// some of the entities to be loaded in the fixture and the id of
// the entity stays the same no matter how many other entities have
// been loaded before. This is crucial in our functional tests, so
// we can go to e.g. http://..../application/15/show
/** @var ClassMetadata $metadata */
$metadata = $manager->getClassMetadata(get_class($application));
$metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_NONE);

$manager->flush(); //this saves all changes from this function

$this->addReference($referenceName, $application);

return $application;
}
}

Любая помощь приветствуется, спасибо заранее!

0

Решение

Хорошо, на этот раз я был глупым.

Недавно мы изменили отношение «Приложение — InstallerContractor» на «многие ко многим» (с «один ко многим», которые у нас были ранее), поэтому вместо использования

setInstallerContractor()

Я должен был использовать

addInstallerContractor()

Спасибо DerStoffel за вашу помощь, мы обязательно попробуем https://github.com/liip/LiipFunctionalTestBundle!

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]