Hello,

I'm trying to write some tests for my code, which uses SQLAlchemy and
Elixir as ORM. I have the following code on my test_controllers.py, that I
got from a paste in the paste bin by Christopher Arndt:

=================================================================== import
turbogears
from nose import with_setup
from turbogears import database, testutil
import sqlalchemy
from turbogears.util import get_model
from pymeter.controllers import Root
import cherrypy

from pymeter import model

cherrypy.root = Root()

# got this class from http://paste.turbogears.org/paste/950; thanks to #
Christopher Arndt
class SADBTest(object):
    model = None

    def setUp(self):
        # bind metadata/engine to model
        database.bind_meta_data()
        if not self.model:
            self.model = get_model()
            if not self.model:
                raise "Unable to run database tests without a model"

        # create all model tables
        for item in dir(self.model):
            item = getattr(self.model, item)
            if isinstance(item, sqlalchemy.Table):
                item.create(checkfirst=True)

    def tearDown(self):
        database.rollback_all()
        # drop all model tables
        for item in dir(self.model):
            item = getattr(self.model, item)
            if isinstance(item, sqlalchemy.Table):
                item.drop(checkfirst=True)

class test_collector_functionality(SADBTest):
    model = model

    def test_add_first_system(self):
        testutil.createRequest('/pymeter/system/')
        assert 'id="systems" class="grid">' not in cherrypy.response.body[0]

    def test_add_and_list_systems(self):
        import pdb;pdb.set_trace()
        self.setUp()
        obj = model.System(name='lala', host='www.debian.org', port=80,
base_url='/')
        obj.flush()
        assert model.System.get(1).name == 'lala'
===================================================================

My test.cfg is only one line:

===================================================================
sqlalchemy.dburi = "sqlite:///:memory:"
===================================================================

When I run nose I have this problem:

===================================================================
Traceback (most recent call last):
  File "/var/lib/python-support/python2.4/nose/case.py", line 132, in runTest
    self.testCase(*self.arg)
  File "/home/kov/src/pymeter/trunk/pymeter/tests/test_controllers.py",
line 51, in
test_add_and_list_systems
    obj.flush()
  File "/usr/lib/python2.4/site-packages/sqlalchemy/ext/assignmapper.py",
line 16,
in do
    return getattr(session, name)(self, *args, **kwargs)
  File "/usr/lib/python2.4/site-packages/sqlalchemy/orm/session.py", line
220, in flush
    self.uow.flush(self, objects)
  File "/usr/lib/python2.4/site-packages/sqlalchemy/orm/unitofwork.py",
line 194, in
flush
    flush_context.execute()
  File "/usr/lib/python2.4/site-packages/sqlalchemy/orm/unitofwork.py",
line 333, in
execute
    head.execute(self)
  File "/usr/lib/python2.4/site-packages/sqlalchemy/orm/unitofwork.py",
line 470, in
execute
    UOWExecutor().execute(trans, self)
  File "/usr/lib/python2.4/site-packages/sqlalchemy/orm/unitofwork.py",
line 793, in
execute
    self.execute_save_steps(trans, task)
  File "/usr/lib/python2.4/site-packages/sqlalchemy/orm/unitofwork.py",
line 810, in
execute_save_steps
    self.save_objects(trans, task)
  File "/usr/lib/python2.4/site-packages/sqlalchemy/orm/unitofwork.py",
line 798, in
save_objects
    task._save_objects(trans)
  File "/usr/lib/python2.4/site-packages/sqlalchemy/orm/unitofwork.py",
line 461, in
_save_objects
    self.mapper.save_obj(self.polymorphic_tosave_objects, trans)
  File "/usr/lib/python2.4/site-packages/sqlalchemy/orm/mapper.py", line
998, in
save_obj
    c = connection.execute(statement, params)
  File "/usr/lib/python2.4/site-packages/sqlalchemy/engine/base.py", line
258, in
execute
    return Connection.executors[type(object).__mro__[-2]](self, object,
*multiparams, **params)
  File "/usr/lib/python2.4/site-packages/sqlalchemy/engine/base.py", line
282, in
execute_clauseelement
    return self.execute_compiled(elem.compile(engine=self.__engine,
parameters=param), *multiparams, **params)
  File "/usr/lib/python2.4/site-packages/sqlalchemy/engine/base.py", line
298, in
execute_compiled
    proxy(str(compiled), parameters)
  File "/usr/lib/python2.4/site-packages/sqlalchemy/engine/base.py", line
294, in proxy
    self._execute_raw(statement, parameters, cursor=cursor, context=context)
  File "/usr/lib/python2.4/site-packages/sqlalchemy/engine/base.py", line
332, in
_execute_raw
    self._execute(cursor, statement, parameters, context=context)
  File "/usr/lib/python2.4/site-packages/sqlalchemy/engine/base.py", line
351, in
_execute
    raise exceptions.SQLError(statement, parameters, e)
SQLError: (OperationalError) no such table: system 'INSERT INTO system
(port, base_url, host, name) VALUES (?, ?, ?, ?)' [80, '/',
'www.debian.org', 'lala']

---------------------------------------------------------------------- Ran
2 tests in 1.518s

FAILED (errors=1)
===================================================================

Any ideas?

Thanks,

-- 
Gustavo Noronha Silva <[EMAIL PROTECTED]>
http://people.debian.org/~kov/






--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---

Reply via email to