Я работаю над приложением Pyramid с SQLAlchemy в качестве ORM. Я пытаюсь протестировать модель с помощью метода класса:
# 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: Не удалось найти привязку, настроенную для сопоставления Mapper|Роль|роль, выражение SQL или этот сеанс
Я попытался изменить meta
обезьяны и заменить этот глобальный сеанс своим сеансом, но затем я получаю эту ошибку: E AttributeError: тип объекта «RoleFactory» не имеет атрибута «find_all»
Я пытался вызвать RoleFactory.FACTORY_FOR.find_all()
, но потом получаю ту же ошибку UnboundExecutionError.
Нужно ли мне делать что-то еще, чтобы factory_boy знал о методе класса?