Как правильно использовать Fixture

Всё про тестирование в Yii 2.0
Ответить
puku
Сообщения: 3
Зарегистрирован: 2017.04.05, 17:28

Как правильно использовать Fixture

Сообщение puku »

Столкнулся со следующей проблемой и не могу понять что я делаю не так.

У меня есть 2 таблицы: users(id, login, и т.д.) и forgot_password_tokens(user_id, token).
Поле user_id в forgot_password_tokens это внешний ключ на таблицу users, но ON DELETE и ON UPDATE стоит RESTRICT. Это сделано, потому что мы не удаляем ничего из базы, а только помечаем как удаленное.

Есть 2 теста. Первый тест - тест LoginForm, второй - ResetPasswordForm.
Первый тест подгружает нужную фикстуру пользователя, второй тест загружает фикстуру с токеном. При запуске первый раз они оба проходят без проблем. При запуске второй раз появляется ошибка:

Код: Выделить всё

Cannot delete or update a parent row: a foreign key constraint fails (`db-ests`.`forgot_password_tokens`, CONSTRAINT `fk_forgot_password_tokens_users` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`))
Ошибка возникает, потому что запускается тест LoginForm, который пытается перезагрузить фикстуру, для этого он чистиит таблицу, но внешний ключ не дает это сделать.

Я думал, может быть можно как-то указать dependency, что они чистил все зависимые таблицы вначале, но видимо нет.
Единственный способ который я вижу, это писать свой код в метод unload (), который будет чистить нужные мне таблицы. Или все-таки я ошибаюсь?
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Как правильно использовать Fixture

Сообщение ElisDN »

В классах фикстур укажите что-то вроде:

Код: Выделить всё

public $dependencies = ['yii\tests\InitDbFixture'];
puku
Сообщения: 3
Зарегистрирован: 2017.04.05, 17:28

Re: Как правильно использовать Fixture

Сообщение puku »

А что это даст? Как я понял, все равно нужно будет создать initdb.php скрипт, который будет чистить всю базу? В этом случае, может действительно проще чистить нужные таблицы в beforeUnload()?
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Как правильно использовать Fixture

Сообщение ElisDN »

puku писал(а): 2017.04.06, 11:35 А что это даст? Как я понял, все равно нужно будет создать initdb.php скрипт, который будет чистить всю базу?
Файл создавать не нужно. Просто этот класс отключает/включает проверку внешних ключей до/после наката миграций.
puku
Сообщения: 3
Зарегистрирован: 2017.04.05, 17:28

Re: Как правильно использовать Fixture

Сообщение puku »

Да, спасибо, это помогло
Аватара пользователя
vitovt
Сообщения: 210
Зарегистрирован: 2012.03.21, 10:37
Контактная информация:

Re: Как правильно использовать Fixture

Сообщение vitovt »

По документации так

Код: Выделить всё

 public $depends = ['yii\test\InitDbFixture'];
Ответить