Hi all,
I'm trying to track down an error where running a full unit test suite
fails with a SQLAlchemy error, while running the single (failing) unit
test passes OK.
The SA error is of the form:
FlushError: New instance terms...@0x2b15590 with identity key (<class
'yel.model.select_source.TermSite'>, (1, 1), None) conflicts with
persistent instance terms...@0x2b8ad50
TermSite is an association table for a many-to-many relationship,
which has a multi-column primary key:
term_site_table = Table('term_site', metadata,
Column('term_id', Integer, ForeignKey("term.id",
ondelete="CASCADE"), primary_key=True),
Column('site_id', Integer, ForeignKey("site.id",
ondelete="CASCADE"), primary_key=True),
Column('weight', Integer, default=1, nullable=False),
)
The error seems to signify that SA thinks there is already an object
waiting to be flushed with the same term_id and site_id. The fact that
the test only fails when a full test suite is run implies that there
is some state left over in between unit test executions.
Abbreviated setUp and tearDown methods:
def setUp(self):
cherrypy.root = root.Root()
turbogears.startup.startTurboGears()
metadata.create_all()
def tearDown(self):
metadata.drop_all()
turbogears.startup.stopTurboGears()
I tried using sqlalchemy_cleanup from testutil, but that seemed to be
too aggressive, producing errors of the form:
InvalidRequestError: Class 'Visit' entity name 'None' has no mapper
associated with it
So:
- what is the recommended database initialisation / cleanup strategy
for unit tests involving SA?
- can anyone suggest how ORM state could be hanging around between
unit tests (I'm using an in-memory DB)?
- is there a convenient way to check on objects in the ORM, waiting to
be flushed?
This is SA 0.4.3 and TG 1.0.8 running against an in-memory sqlite DB
Thanks!
James
(Cross-posted to SA list)
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"TurboGears" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/turbogears?hl=en
-~----------~----~----~----~------~----~------~--~---