【发布时间】:2021-09-06 21:19:58
【问题描述】:
如何在 FunctionalTestCase 类中应用 TCA 覆盖?
我正在为扩展 FrontendUser 域模型和存储库的扩展编写 TYPO3 功能测试。 TYPO3 测试框架用于运行测试,但它似乎没有从Configuration/TCA/Overrides/fe_users.php 文件加载覆盖 TCA。是否有我缺少的Bootstrap 功能或者可能是额外的设置? (< > 标签下面的任何内容都已被替换为 NDA 目的,例如内部扩展密钥)
这是错误:
┐
├ TYPO3\CMS\Extbase\Persistence\Generic\Storage\Exception\SqlErrorException: Unknown column 'gender' in 'field list'
│
╵ <extension-folder>/.Build/Web/typo3/sysext/extbase/Classes/Persistence/Generic/Storage/Typo3DbBackend.php:146
╵ <extension-folder>/.Build/Web/typo3/sysext/extbase/Classes/Persistence/Generic/Backend.php:634
╵ <extension-folder>/.Build/Web/typo3/sysext/extbase/Classes/Persistence/Generic/Backend.php:282
╵ <extension-folder>/.Build/Web/typo3/sysext/extbase/Classes/Persistence/Generic/Backend.php:269
╵ <extension-folder>/.Build/Web/typo3/sysext/extbase/Classes/Persistence/Generic/PersistenceManager.php:166
╵ <extension-folder>/Tests/Functional/Domain/Repository/FrontendUserRepositoryTest.php:96
┴
这是功能测试类:
class FrontendUserRepositoryTest extends FunctionalTestCase
{
protected $testExtensionsToLoad = [
'typo3conf/ext/<my-extension-key>'
];
protected $coreExtensionsToLoad = [
'typo3/sysext/extbase'
];
/**
* @var FrontendUserRepository
*/
protected $frontendUserRepository;
/**
* @var PersistenceManager
*/
protected $persistenceManager;
/**
* @var FrontendUser
*/
protected $frontendUser;
/**
* @var string
*/
protected $email;
/**
* @var string
*/
protected $firstName;
/**
* @var string
*/
protected $lastName;
protected function setUp(): void
{
parent::setUp();
Bootstrap::initializeBackendUser();
$GLOBALS['BE_USER']->user['admin'] = 1;
$GLOBALS['BE_USER']->user['uid'] = 1;
$GLOBALS['BE_USER']->workspace = 0;
Bootstrap::initializeLanguageObject();
/** @var PersistenceManager $persistenceManager */
$this->persistenceManager = GeneralUtility::makeInstance(PersistenceManager::class);
$objectContainer = new Container($this->getContainer());
$objectManager = new ObjectManager($this->getContainer(), $objectContainer);
$this->frontendUserRepository = new FrontendUserRepository($objectManager);
$this->frontendUserRepository->injectPersistenceManager($this->persistenceManager);
$this->email = 'test@test.com';
$this->firstName = 'Tester';
$this->lastName = 'Man';
$this->frontendUser = GeneralUtility::makeInstance(FrontendUser::class);
$this->frontendUser->setEmail($this->email);
$this->frontendUser->setFirstName($this->firstName);
$this->frontendUser->setLastName($this->lastName);
}
/**
* @test
* @throws \TYPO3\CMS\Extbase\Persistence\Exception\IllegalObjectTypeException
*/
public function testRetrieveByEmailFromRepository()
{
$this->frontendUserRepository->add($this->frontendUser);
$this->persistenceManager->persistAll();
/** @var FrontendUser $frontendUser */
$frontendUser = $this->frontendUserRepository->findUserByEmail($this->email)->getFirst();
$this->assertEquals($this->email, $frontendUser->getEmail());
$this->assertEquals($this->firstName, $frontendUser->getFirstName());
$this->assertEquals($this->lastName, $frontendUser->getLastName());
}
/**
* @test
*/
public function checkIfTableExists()
{
$queryBuilder = $this->getConnectionPool()->getQueryBuilderForTable('INFORMATION_SCHEMA.COLUMNS');
$queryBuilder->getRestrictions()->removeAll();
$query = $queryBuilder->select('COLUMN_NAME')
->from('INFORMATION_SCHEMA.COLUMNS')
->where(
$queryBuilder->expr()->eq('TABLE_NAME', $queryBuilder->createNamedParameter('fe_users'))
)
->execute();
/* Dumps the base fe_users table columns without the TCA overrides applied */
var_dump($query->fetchAllAssociative());
}
}
【问题讨论】:
标签: php testing phpunit typo3 functional-testing