не могу решить)))
У меня есть user_role_id в user, имеет дефолтное значение 1, то есть когда создаем пользователя, то не передаем нигде явно роль и она проставляется в базе как 1)
Сейчас делаю тесты на чистую базу, фабрикой создаю роль в первом тесте, она получает айдишник 1, после этого транзакция откатывает эту роль, но счетчик инкремента записывает изменение. Во втором тесте так же фабрикой создаю эту роль, но она уже с айдишкой 2 идет) соответственно создание, которое по дефолту ставит значение 1 - падает)) как оттестровать этот момент?))
не привязываться к Id, а при создании пользователя выбрать роль по slug или имени и взять из неё id от autoincrement можно уйти если использовать UUID или LUID в качеcтве primary key
Это все через серьезные правки в сервисах)) не зотелось бы) варианты эти тоже вижу, но больно)))
какие серьезные правки, у вас в сервисах привязка к id записи в базе данных
в Бд что то менять в плане добавения/удаления столбцов) а там создается с других мест с кучи еще надо будет там тоже все поправить)
Все оказалось проще)) factory(UserRole::class)->create([UserRole::ID_COLUMN => 1]); То есть если счетчик поднял значение, то это не обязывает его запрещать запись в эту айди, если записи нету))
я предложил два варианта, UUID и LUID это крайний случай и если проект только начался. а также второй вариант, при добавление роли пользователю, найдите её в базе и из нее возомните ID или через методы отношений подвяжите роль пользователю или если очень хочется сбросить счетчик, то делайте truncate на таблице ролей
нет не запрещает, но с каждым тестом он будет расти
Да) вариантов много) просто для меня было удивлением что между тестами не чистятся счетчики при откате транзакцией)
кто и главное зачем их чистить, ты можешь перед каждым тестом вообще делать refresh database, тогда вообще будет все пересоздаваться
так и делаю) но пока другие тесты работают они счетчик нагоняют. use RefreshDatabase; этот трейт отказывает изменение, но не откатывает счетчик)
Обсуждают сегодня