PHPunit: проблемы с тестированием - PullRequest
0 голосов
/ 19 ноября 2018

Я столкнулся с серьезной проблемой при написании тестов. Я использую Laravel 5.6.0 в качестве фреймворка и PHPUnit 7.0 для тестирования. В качестве тестовой БД я использовал sqlite с хранением в памяти. Это из моего database.php:

'sqlite_testing' => [
    'driver'   => 'sqlite',
    'database' => ':memory:',
    'prefix'   => '',
],

Но моя проблема в том, что у меня есть несколько мест, где я использую whereRaw, например $query->whereRaw('STR_TO_DATE(CONCAT( date , " ", from ), "%Y-%m-%d %k") < ?', [$before]);. Проблема здесь в том, что sqlite не имеет функций STR_TO_DATE или CONCAT, которые есть в MySQL. Поэтому PHPUnut выдает кучу ошибок из-за этого.

Вместо этого моим решением было использование БД MySQL в качестве тестовой БД. Но это, похоже, не работает, так как я получаю несколько разных ошибок, в основном у меня есть несколько тестов, где ограничение внешнего ключа не удается.

Одним из примеров этого является то, что у меня есть следующий метод в моем базовом TestCase setUp:

if (Schema::hasTable('gym_schedule') && !empty(GymSchedule::createGymSchedules())) {
    $this->artisan('db:seed', ['--class' => 'GymScheduleTableSeeder']);
}

Это происходит каждый раз, кроме первого, потому что говорится, что a schedùle with id 1 уже существует (id - мой первичный ключ). Я попытался обрезать все таблицы между каждым классом теста, используя tearDown, но это не помогло, а также тестирование стало очень медленным, примерно 3 секунды для каждого теста.

Так что в принципе этот подход тоже не работает.

Я в растерянности. Я попытался погуглить это и поиск через StackOverflow. Я открыт для любых предложений, которые не слишком сложны (либо удалите все функции MySQL каким-либо образом, решите проблему использования MySQL или что-нибудь еще на самом деле).

У кого-нибудь есть хорошая идея?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...