В приложении Symfony 4 я настроил несколько менеджеров сущностей.
Я хочу, чтобы мои функциональные тесты автоматически создавали таблицы БД для обоих менеджеров.
Однако, когда я запускаю тест; PHP-модуль сталкивается с ошибкой, которая говорит
PDOException: SQLSTATE [42S02]: базовая таблица или представление не найдено: 1146
Таблица 'test.example' не существует
конфиг / пакеты / doctrine.yaml:
doctrine:
dbal:
connections:
default:
url: '%env(resolve:DATABASE_URL)%'
driver: 'pdo_mysql'
server_version: '5.7'
charset: utf8mb4
custom:
url: '%env(resolve:DATABASE_URL)%'
driver: 'pdo_mysql'
server_version: '5.7'
charset: utf8mb4
orm:
default_entity_manager: default
auto_generate_proxy_classes: '%kernel.debug%'
entity_managers:
default:
connection: default
naming_strategy: doctrine.orm.naming_strategy.underscore
auto_mapping: true
mappings:
Model:
is_bundle: false
type: annotation
dir: '%kernel.project_dir%/src/Entity/Model'
prefix: 'App\Entity\Model'
alias: Model
custom:
connection: custom
naming_strategy: doctrine.orm.naming_strategy.underscore
mappings:
Custom:
is_bundle: false
type: annotation
dir: '%kernel.project_dir%/src/Entity/Custom'
prefix: 'App\Entity\Custom'
alias: Custom
Для создания таблиц и загрузки приборов в настоящее время я использую Liip Functional Test Bundle .
Простой тест выглядит так:
Тесты \ Functional \ GeneralControllerTest.php:
class GeneralControllerTest extends WebTestCase
{
/**
* {@inheritdoc}
*/
protected function setUp()
{
$this->loadFixtures([
SomeFixtures::class,
MoreFixtures::class,
]);
}
/**
* @dataProvider providePageUris
* @test
* @param string $uri
*/
public function checkThatPageLoads($uri)
{
$client = static::createClient();
/* ... more code ... */
$client->request(Request::METHOD_GET, $uri);
static::assertEquals(Response::HTTP_OK, $client->getResponse()->getStatusCode());
}
/**
* @return array
*/
public function providePageUris()
{
return [
["/dashboard"],
];
}
}
Как я могу заставить свой Test Case создавать таблицы базы данных для других пользовательских Doctrine EntityManager?
Я попытался добавить:
$this->loadFixtures([], true, "custom");
, а также:
$this->runCommand("doctrine:schema:create --env=test --em=custom");
к методу setUp () контрольного примера, но это не привело к тому, что необходимо. Все таблицы базы данных должны быть созданы перед загрузкой любого Fixture в базу данных.