Как использовать инструмент миграции phinx с тестовым фреймворком Codeception

У меня есть некоторый опыт разработки клиентских и серверных приложений JavaScript. Но сейчас я разрабатываю свое первое веб-приложение на php и ищу лучший набор инструментов для разработки.
Я использую phinx, чтобы разделить структуру моей базы данных между средами тестирования, разработки и производства. Я собираюсь использовать codeception для тестирования операций с базой данных.

Проблема в том, что кодовое восприятие ожидает, что я буду размещать команды создания таблиц SQL в tests/_data/dump.sql и удаляет все таблицы, которые я создал в файле миграции phinx. Я могу установить cleanup: false в codeception.yml но я должен очистить таблицы БД перед каждым тестом в этом случае. И я не знаю как. Я не нашел способностей для ручной очистки БД перед каждым тестом в коде.

Как я могу получить кодовое восприятие и координацию phinx?

PS: я нашел обсуждение использования миграций в коде и кажется, что польза от этого очевидна не для всех.

5

Решение

С Codeception Вы можете создать помощник за любую вещь, которую вы хотите, включая загрузку миграций.

Вот помощник для загрузки миграций базы данных перед каждым тестом. У меня нет шансов протестировать этот код, но основная идея должна быть понятна здесь.

Помощник по кодированию:

namespace Codeception\Module;

use Codeception\Module;
use Codeception\TestInterface;
use Phinx\Console\PhinxApplication;
use Symfony\Component\Console\Input\StringInput;
use Symfony\Component\Console\Output\ConsoleOutput;
use Symfony\Component\Console\Output\NullOutput;

class FixtureHelper extends Module
{
/**
* Run database migrations before each test if database population enabled.
*
* @param TestInterface $test
*/
public function _before(TestInterface $test)
{
$populate = $this->getModule('Db')->_getConfig('populate');

if ($populate) {
$this->migrateDatabase();
}
}

/**
* Run the database migrations.
*/
public function migrateDatabase()
{
// Run Phinx console application.
$app = new PhinxApplication();
$app->setAutoExit(false);

$output = new NullOutput();
//$output = new ConsoleOutput();

// Run database migrations for test environment.
$input = new StringInput('migrate -e test');
$app->run($input, $output);

// ... you also can load the fixtures here
//$input = new StringInput('seed:run -s <my-seeds> -e test');
//$app->run($input, $output);
}
}

Конфигурация кодового восприятия (для функционального тестирования):

actor: FunctionalTester
modules:
enabled:
- ... your modules
- FunctionalHelper
- FixtureHelper
config:
Db:
dsn: '... dsn'
user: '%DB_USER%'
password: '%DB_PASSWORD%'
dump: 'tests/_data/dump.sql'
populate: true
cleanup: true
FixtureHelper:
depends: Db

Дамп базы данных (tests / _data / dump.sql):

-- Dump should not be empty because cleanup will not work.
-- So at least any silly sql query.
SELECT 1+2 AS veryComplicatedCalculations;

Конфигурация Phinx (phinx.yml) должен находиться в том же каталоге, что и конфигурация Codeception (codeception.yml) или вы должны убедиться, что PhinxApplication загружает ваш конфиг.

Надеюсь, это поможет!

2

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

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

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