Интересует вопрос правильности тестирования.
У меня есть n-ое кол-во тестов. Которые работают с n-ым кол-вом таблиц в базе данных. (1
Для таблиц я создал fixture. Но они заполняют таблицы 20 сек.
Когда я пишу Unit тесты - fixture заполняют базу для каждого теста. На одно заполнение уходит 20сек. То есть для 5 тестов база заполняется 100сек.
Да, я понимаю, что для каждого теста все 13 таблиц заполнять не надо, а надо только те, которые будут использоваться в тесте. Но у меня множеств тестов для каждой сущности, поэтому даже в этом случае происходит все очень долго.
Сейчас я в одном классе теста пишу только один публичный метод для теста. А в нем вызываю приватные методы-подтесты.
В принципе, это метод рабочий. Но я хотел бы использовать глобальные фикстуры, которые бы заполняли базу только один раз, при инициализации приложения.
Думал, что это можно сделать через метод glogalFixture().
Но это не сработало.
Добавил вот такой метод в класс теста, но в этом случае база не заполнилась.
Код: Выделить всё
public function globalFixture()
{
return ArrayHelper::merge(
parent::globalFixtures(),
[
'users' => UsersFixture::className(),
...
]
);
}
Код: Выделить всё
return [
'language' => 'en-US',
'controllerMap' => [
'fixture' => [
'class' => 'yii\faker\FixtureController',
'fixtureDataPath' => '@tests/codeception/fixtures',
'templatePath' => '@tests/codeception/templates',
'namespace' => 'tests\codeception\fixtures',
'globalFixtures' => [
'tests\codeception\fixtures\UsersFixture',
'tests\codeception\fixtures\UsersRolesFixture',
...
],
],
],
'components' => [
'db' => [
'dsn' => 'mysql:host=localhost;dbname=taskmanager_test',
],
'mailer' => [
'useFileTransport' => true,
],
'urlManager' => [
'showScriptName' => true,
],
],
];
PS:
при использовании метода public function fixtures() база заполняется данными.