使用Python“;混合器;具有带构造函数参数的SQL Alchemy模型的库
我使用Mixer作为SQLAlchemy模型的夹具生成器,flask作为Mixer后端。我有一个带构造函数的用户模型:使用Python“;混合器;具有带构造函数参数的SQL Alchemy模型的库,python,unit-testing,flask,sqlalchemy,flask-sqlalchemy,Python,Unit Testing,Flask,Sqlalchemy,Flask Sqlalchemy,我使用Mixer作为SQLAlchemy模型的夹具生成器,flask作为Mixer后端。我有一个带构造函数的用户模型: class User(db.Model): user_id = db.Column(db.Integer, primary_key=True) username = db.Column(db.String(32), nullable=False, unique=True) password = db.Column(db.String(64), nulla
class User(db.Model):
user_id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(32), nullable=False, unique=True)
password = db.Column(db.String(64), nullable=False)
salt = db.Column(db.String(64), nullable=False)
def __init__(self, username, password):
# Stuff to init
pass
根据Mixer的文档,我使用重写的方法创建了一个Mixer子类,用构造函数参数填充模型,如下所示:
class MixerForModelsWithConstructor(Mixer):
"""
Mixer for models which requires constructor values
"""
def populate_target(self, values):
target = self.__scheme(**values)
return target
以下是创建混合器固定装置的方法:
mixer = mixer = MixerForModelsWithConstructor(app=app)
user = mixer.blend(Users, username='test', password='test')
其中,app
是烧瓶应用程序对象。
但是,当我运行测试时,所有涉及的任务都失败了,因为模型构造函数仍然需要参数,而混合器没有传递它们
如果您有任何想法,我们将不胜感激。提前感谢。文档似乎已经过时 以下是要使用的正确代码:
class CustomTypeMixer(TypeMixer):
def __init__(self, cls, mixer=None, factory=None, fake=True):
super().__init__(cls, mixer=mixer, factory=factory, fake=fake)
self.__scheme = cls # not sure why above line isn't setting this... is this the keyword 'cls' or just a variable named 'cls'?
def populate_target(self, values):
""" Populate a target by values. """
target = self.__scheme(**dict(values))
return target
class CustomMixer(Mixer):
type_mixer_cls = CustomTypeMixer
mixer = CustomMixer(session=session, commit=True)
抄袭了这个答案