1

django 1.3、Mongodb、および django-mongo-engine を使用して Web サイトを構築しました。「manage.py runserver」を使用してサーバーを実行すると、成功します。しかし、「manage.py test」で単体テストをしようとすると、なぜか失敗してしまいます。

データベースに関するsettings.pyは次のとおりです。

DATABASES = {
    'default': {
        'ENGINE': 'django_mongodb_engine', 
        'NAME': 'sean_test',                     
        'USER': '',                    
        'PASSWORD': '',                  
        'HOST': '',                      
        'PORT': '',                      
    }
}

そして、これはテスト中のエラーメッセージです:

....フィクスチャ 'c:\Python27\lib\sitepackages\django\contrib\auth\fixtures\authtestdata.json' をインストールする際の問題: トレースバック (最新の呼び出しが最後):

ファイル「c:\Python27\lib\site-packages\django\core\management\commands\loaddata.py」、174 行目、handleobj.save(using=using) 内

ファイル「c:\Python27\lib\site-packages\django\core\serializers\base.py」、165 行目、savemodels.Model.save_base(self.object、using=using、raw=True) 内

ファイル "c:\Python27\lib\site-packages\django\db\models\base.py"、573 行目、save_baseresult = manager._insert(values, return_id=update_pk, using=using) 内

ファイル "c:\Python27\lib\site-packages\django\db\models\manager.py"、195 行目、_insertreturn insert_query(self.model, values, **kwargs) 内

ファイル「c:\Python27\lib\site-packages\django\db\models\query.py」、1438行目、insert_queryreturn query.get_compiler(using=using).execute_sql(return_id)

ファイル「c:\Python27\lib\site-packages\djangotoolbox\db\basecompiler.py」、369 行目、execute_sqlvalue = self.convert_value_for_db(db_type, value)

ファイル「c:\Python27\lib\site-packages\django_mongodb_engine\compiler.py」、67 行目、wrapperreturn func(*args, **kwargs) 内

ファイル "c:\Python27\lib\site-packages\django_mongodb_engine\compiler.py"、307 行目、convert_value_for_dbraise の InvalidId(msg)

InvalidId: AutoField (デフォルトの主キー) 値は、MongoDB の ObjectId を表す文字列である必要があります (代わりに u'1' を取得)

django は整数を使用し、mongodb は主キーに文字列を使用することは知っていますが、「runserver」が成功したときにテストが失敗する理由はわかりません。この問題を解決する方法について何か考えはありますか?

ありがとう!

4

2 に答える 2

0

したがって、テストを実行するときにmongodbインスタンスに接続するためのテスト設定がないようです。これは、コマンドラインから実行しているため、次のようなことを試してみてください。

接続しないlsettings.pyと接続するsettings.pyの2つの設定ファイルがあります

from lsettings import *
mongodb.connect()

So, while locally testing you can:

python manage.py test --settings=lsettings

うまくいけば、それはあなたの問題を回避します。:)

于 2013-02-04T23:35:47.693 に答える
0

問題は、この後の質問で説明されているように、フィクスチャをロードすることです。

対応する answerで説明されているように、フィクスチャの ID を適切な ObjectIds に置き換えることで修正できます。

トレースバックから、問題はによって提供される「authtestdata.json」フィクスチャにありdjango.contrib.authます。これらは ObjectIds と互換性がないため、テストを更新して別のフィクスチャを使用するか、更新できない場合は失敗したテストをスキップする必要があります。たとえば、Django の認証テストはパスしません。

于 2013-12-26T11:16:37.320 に答える