私は ORM として SQLAlchemy を使用して Pyramid アプリに取り組んでいます。クラスメソッドでモデルをテストしようとしています:
# this is essentially a global used by all the models
Session = scoped_session(sessionmaker(autocommit=False))
class Role(Base):
__tablename__ = 'role'
id = sa.Column(sa.types.Integer, primary_key=True)
name = sa.Column(sa.types.Text, unique=True, nullable=False)
def __init__(self, **kwargs):
super(Role, self).__init__(**kwargs)
@classmethod
def find_all(self):
return Session.query(Role).order_by(Role.name).all()
factory_boyを使用してテストしていますが、テスト工場をセットアップしようとしている方法は次のとおりです。
import factory
from factory.alchemy import SQLAlchemyModelFactory
from sqlalchemy.orm import scoped_session, sessionmaker
from zk.model.meta import Base
from zk.model.role import Role
session = scoped_session(sessionmaker())
engine = create_engine('sqlite://')
session.configure(bind=engine)
Base.metadata.create_all(engine)
class RoleFactory(SQLAlchemyModelFactory):
FACTORY_FOR = Role
FACTORY_SESSION = session
RoleFactory.find_all()
ただし、テストで呼び出そうとすると、次のエラーが表示されます: E UnboundExecutionError: マッパーで構成されたバインドが見つかりませんでした。
meta
モンキーパッチを適用して、そのグローバル セッションを自分のセッションに置き換えようとしましたが、次のエラーが発生しました: E AttributeError: type object 'RoleFactory' has no attribute 'find_all'
呼び出してみRoleFactory.FACTORY_FOR.find_all()
ましたが、同じ UnboundExecutionError が発生します。
factory_boy がクラスメソッドについて知るために何か他のことをする必要がありますか?