4

Flask で書かれており、Declarative extension http://flask.pocoo.org/docs/patterns/sqlalchemy/で SQLAlchemy を使用する、私がしばらく取り組んできたプロジェクトがあります。最近、プロジェクトの単体テストを開始することにしましたが、私の人生では、それを機能させる方法を理解できないようです。

http://flask.pocoo.org/docs/testing/を見ましたが、うまくいかないようです。

さまざまな Web サイトのものを組み合わせてみましたが、正しく機能するものを見つけることができません。

class StopsTestCase(unittest.TestCase):

    def setUp(self):
        self.engine = create_engine('sqlite:///:memory:')
        self.session = scoped_session(sessionmaker(autocommit=False,
                                         autoflush=False,
                                         bind=self.engine))
        models.Base = declarative_base()
        models.Base.query = self.session.query_property()

        models.Base.metadata.create_all(bind=self.engine)

    def test_empty_db(self):
        stops = session.query(models.Stop).all()
        assert len(stops) == 0

    def tearDown(self):
        session.remove()

if __name__ == '__main__':
    unittest.main()

残念ながら、私が得ることができる最高のものは、次のエラーを引き起こします。

OperationalError: (OperationalError) no such table: stops u'SELECT stops.agency_id AS stops_agency_id, stops.id AS stops_id, stops.name AS stops_name, stops."desc" AS stops_desc, stops.lat AS stops_lat, stops.lon AS stops_lon, stops.zone_id AS stops_zone_id \nFROM stops' ()

----------------------------------------------------------------------
Ran 1 test in 0.025s

FAILED (errors=1)

これに関するヘルプは大歓迎です。誰かがこれまでにこれを経験したことがあり、それを機能させたことがあれば、いくつかの指針が欲しいです! 前もって感謝します。

4

2 に答える 2

2

declarative_baseモデルの基本クラスとして使用したのと同じインスタンスを使用する必要があります。また、2 つの異なるsessionインスタンスself.sessionといくつかの module-globalを使用しているようですsession。こちらもお掃除してみてください。

于 2012-10-07T08:54:37.563 に答える