Migrate from mixer to model-bakery and faker - #827
Conversation
| def _random_user_name() -> str: | ||
| return str(uuid.uuid4()) | ||
|
|
||
|
|
||
| def _random_email() -> str: | ||
| uuid_as_str = str(uuid.uuid4()).replace("-", "_") | ||
| return f"{uuid_as_str}@mail.com" | ||
|
|
||
|
|
||
| mixer.register("users.User", username=_random_user_name, email=_random_email) |
There was a problem hiding this comment.
@kazqvaizer fyi: у model-bakery нет 100% аналога/
Есть отдаленно напоминающие recepies (документация), но вынуждает создавать странные baker_recipes.py и потом ещё вручную их использовать.
Вообще не вижу необходимости в этом коде в шаблоне, но если решим что нужен, то думаю ок (и даже понятнее, т.к. меньше магии) убрать в users → factory → user
|
|
||
| class FactoryProtocol(Protocol): | ||
| mixer: mixer | ||
| baker: ModuleType |
There was a problem hiding this comment.
Вот тут не оч идеально получается: model-bakery типизированный, но экспортирует функции с разными типами. Когда импортирую (и пишу тип) для модуля, то langauge сервер не подскажет типы у функций
- То есть в моём варианте нет подсветки синтаксиса
@register
def user(self: FactoryProtocol, **kwargs) -> User:
return self.baker.make("users.User", **kwargs) # <-- нет подсветки/проверки синтаксиса- А если импортировать baker в каждом файле, то будет понятно что за модуль
bakerи будет проверка синтаксиса
from model_bakery import baker # <-- импортируем напрямую
@register
def user(self: FactoryProtocol, **kwargs) -> User:
return baker.make("users.User", **kwargs) # <-- есть проверка синтаксисаТо вариант 2 мне совсем не нравится — в каждом файле с тестами придётся испортировать, не удобно + сложнее заменить на что-то другое как сейчас меняем mixer.
6ca77bb to
00f5b75
Compare
|
Мне норм, все лучше чем древний миксер! Мерджим? |
Мигрируем на
model-bakery+fakerAPI у
model-bakeryпохож наmixer.Чаще будет просто работать
mixer.blend(...)-->baker.make(...)Issue:
Бонус:
model-bakery будет падать, если в
baker.makeпередавать параметр, которого нет у django модели + он не служебный. Это удобно, когдаsomethiingвместоsomething) и не понятно что же тест падает.Пример:
mixer игнорировал игнорировал атрибуты, которых нет у модели
model_bakery будет выкидвать exception