2013-10-16 33 views
0

我下面这个http://pythonhosted.org/Flask-MongoKit/作为一个例子瓶MongoKit“合集”对象不是可调用

我只是试图让文件的实例编写单元测试,但它不工作。下面是测试代码:

import unittest 
from tests import app, db, ctx 
from word.models import Word 

class ModelWordTestCase(unittest.TestCase): 

    def setUp(self): 
     pass 

    def test_model_word(self): 
     print db.Word 

     word = db.Word() 

     self.assertIsNotNone(word) 

    def tearDown(self): 
     pass 

词类

from flask.ext.mongokit import Document 
from core import db 

@db.register 
class Word(Document): 
    __collection__ = 'words' 
    use_dot_notation = True 

    STATUS = { 
     "approved" : 1, 
     "pending" : 0, 
     "rejected" : -1, 
    } 

    structure = { 
     'lang': unicode, 
     'local': unicode, 
     'pronunciation' : unicode, 
     'meaning': unicode, 
     } 

令人惊讶与print db.Word结印时db.Word存在,但它不能被称为创建一个新的实例作为完成我上面提到的教程。下面是测试的输出:

Collection(Database(MongoClient('localhost', 27017), u'words_test'), u'Word') 

E 
====================================================================== 
ERROR: test_model_word (tests.model_tests.ModelWordTestCase) 
---------------------------------------------------------------------- 
Traceback (most recent call last): 
    File "tests/model_tests.py", line 14, in test_model_word 
    word = db.Word() 
    File "/usr/local/lib/python2.7/dist-packages/mongokit/collection.py", line 64, in __call__ 
    self.__name) 
TypeError: 'Collection' object is not callable. If you meant to call the 'Word' method on a 'Database' object it is failing because no such method exists. 

---------------------------------------------------------------------- 
Ran 1 test in 0.002s 

FAILED (errors=1) 

我怎样才能解决这个问题,让Word文档的情况下,这样我可以创建并保存记录。

+0

请编辑您的问题,包括代码你在哪里定义'Word'。 –

+0

用代码编辑了这个问题。现在检查 – codefreak

回答

1

我想你在测试中使用了错误的db实例。您应该使用您用于注册模型的相同db实例。所以,我不知道你的代码是如何构成的,但是,乍一看,你应该从你的模型导入DB:

>>> from word.models import db 
>>> db.Word.find() 

也许

>>> from core import db 
+0

我停止使用Mongokit并直接开始使用pymongo。它更加灵活,并且正在积极开发。但既然你的名声很低,并给出了合理的答案,无论如何我都会接受你的答案。 – codefreak