簡體   English   中英

使用factory_boy和SQLAlchemy以及類方法

[英]Using factory_boy with SQLAlchemy and class methods

我正在使用SQLAlchemy作為ORM的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:無法找到在映射器Mapper | Role | role,SQL表達式或此Session上配置的綁定

我嘗試monkeypatching meta並用我的會話替換那個全局Session,但后來我得到了這個錯誤: E AttributeError:type object'RoleFactory'沒有屬性'find_all'

我嘗試調用RoleFactory.FACTORY_FOR.find_all()但后來我得到了相同的UnboundExecutionError。

我是否需要為factory_boy做其他事情以了解類方法?

這可能是顯而易見的,但似乎你所擁有的是一個RoleFactory實例,當你需要一個Role實例時,工廠將無法訪問任何classmethods,因為它不是該類的子類。 嘗試這樣做,看看會發生什么:

role = RoleFactory.build()
roles = role.find_all()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM