Marcuzy
@Marcuzy
php разработчик

Почему codeception не видит temporary table?

Тестирую класс для пакетной вставки в базу.
Создаю для теста временную таблицу (в setUp или в методе теста, не важно)
Yii::$app->db->createCommand(
			'CREATE TEMPORARY TABLE {{%table_loading}} SELECT * FROM {{%table}} LIMIT 0'
		)->execute();


После некоторых операций проверяю наличие:
$I->canSeeInDatabase('table_loading', ['brand_name'=>'brand_1', 'article_name'=>'article_1', 'no_in_part'=>1]);

В результате этого утверждения получаю ошибку
Base table or view not found: 1146 Table 'mydatabase.table_loading' doesn't exist

Для проверки в том же тесте дописал (new \yii\db\Query)->from('{{%table_loading}}')->count() - работает исправно. Как я понимаю, у codeception у модуля Db одно подключение, а у Yii::$app->db другое, соответсвенно потому временная таблица и не доступна.

Если мои догадки верны, то вопрос к гуру - как тестировать в таких ситуациях, какие есть good practice?
  • Вопрос задан
  • 631 просмотр
Пригласить эксперта
Ответы на вопрос 2
ppokrovsky
@ppokrovsky
Если речь про Yii2, Codeception для подключения БД наследует конфиг Yii, переопределяя только dsn (имя тестовой базы, см tests/codeception/config/config.php). В таком случае самое простое - воткнуться дебаггером после CREATE TEMPORARY TABLE и посмотреть, где создается таблица.
Ответ написан
Комментировать
@ejkot
Потому что временная таблица живет в рамках одной сессии БД. Тестируемый скрипт работает с одной сессией, codeception создает свою сессию, из которой первую не видно. А вот что с этим делать не ясно
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы