我刚刚遇到了我的测试套件的问题。我正在使用带有鼻子测试、SQLAlchemy、Flask 和 Factory-Boy 的设置
我有以下代码:
def _create_fixtures(self):
self.user = UserFactory()
pprint(db.query(User).all())
db.add(self.user)
pprint(db.query(User).all())
女巫返回以下:
[<User #1>, <User #2>]
[<User #1>, <User #2>]
我的 UserFactory 看起来像这样:
class UserFactory(Factory):
FACTORY_FOR = User
FACTORY_SESSION = db
email = Sequence(lambda n: 'user{0}@wohnortfinder.com'.format(n))
password = "password"
username = Sequence(lambda n: 'user{0}'.format(n))
(是的,我使用的是普通工厂而不是他的 SQLAlchemy 工厂,因为这也不起作用)
为什么我的工厂对象没有存储到数据库中?它不会引发错误,只是不会保存。我的意思是即使当前事务尚未提交,稍后的查询也应该查询实际事务,不是吗?
奇怪的是,当我手动提交会话时,它会引发错误。
InvalidRequestError: No transaction is begun.
即使我在创建会话对象时开始了事务。
def init_engine(uri, **kwargs):
global engine
engine = create_engine(uri, **kwargs)
Base.metadata.create_all(engine)
db.begin()
return engine
engine = None
db = scoped_session(lambda: create_session(bind=engine))
知道为什么这不起作用吗?
谢谢你的想法