What are you trying to achieve?
According to https://codeception.com/docs/modules/DataFactory.html you can create a new entity which is related to an existing entity. I can't get this functionality to work.
What do you get instead?
[Doctrine\ORM\ORMInvalidArgumentException] A new entity was found through the relationship 'HMRX\CoreBundle\Entity\AccountHolder#accountRole' that was not configured to cascade persist operations forentity: HMRX\CoreBundle\Entity\AccountRole@000000004c9582ff000000009565e70e. To solve this issue: Either explicitly call EntityManager#persist() on this unknown entity or configure cascade persist this associationin the mapping for example @ManyToOne(..,cascade={"persist"}). If you cannot find out which entity causes the problem implement 'HMRX\CoreBundle\Entity\AccountRole#__toString()' to get a clue.Provide test source code if related
publicfunctionshouldUseAFakeAccountHolder(AcceptanceTester$I) {
$I->have(AccountHolder::class);
}class Factories extends \Codeception\Module {
publicfunction_beforeSuite($settings = []) {
/** @var EntityManager $em */$em = $this->getModule('Doctrine2')->_getEntityManager();
$factory = $this->getModule('DataFactory');
$factory->_define(AccountHolder::class, [
'accountRole' => $em->getRepository(AccountRole::class)->findOneBy(['name' => 'ROLE_PHARMACIST']),
]);
}
}Details
# Codeception Test Suite Configuration## Suite for acceptance tests.# Perform tests in browser using the WebDriver or PhpBrowser.# If you need both WebDriver and PHPBrowser tests - create a separate suite.actor: AcceptanceTestermodules:
enabled:
- WebDriver:
url: 'https://localhost/'browser: chrome # 'chrome' or 'firefox'capabilities:
chromeOptions:
w3c: false
- \Helper\Acceptance
- Doctrine2:
depends: Symfony
- DataFactory:
depends: Doctrine2factories: tests/_support/Factories
- \Helper\Factories
What are you trying to achieve?
According to https://codeception.com/docs/modules/DataFactory.html you can create a new entity which is related to an existing entity. I can't get this functionality to work.
What do you get instead?
Details