pagetypes.py
後で再利用するために、データベースからいくつかの定数(ここでは実際には単語定数を使用するべきではありません)を抽出するモジュールがあります。
def _get_page_type_(type):
return PageType.objects.get(type=type)
PAGE_TYPE_MAIN = _get_page_type_('Main')
PAGE_TYPE_OTHER = _get_page_type_('Other')
次に、ビューのどこかで:
import pagetypes
...
print pagetypes.PAGE_TYPE_MAIN #simplified
このコードがテスト中でない限り、dbにこれらのレコードがある場合はすべて正常に機能し、確実に機能します。その場合、フィクスチャを介してそれらのレコードをdbにロードしたいと思います。それに関する問題は、syncdb
pagetypesモジュールがインポートされるまでにフィクスチャがロードされない(実行されない場合でも)ため、_get_page_type_
呼び出しが次のように失敗することです。
psycopg2.ProgrammingError: relation "pagetype" does not exist
テスト対象のビューによってインポートされるため、テストランナーは常にpagetypes
モジュールをインポートしようとします。
この問題を回避するにはどうすればよいですか?
ページタイプ定数を遅延ロードするPAGE_TYPE_MAIN
ことPAGE_TYPE_OTHER
を考えていましたが、それらのレコードがデータベース(またはテスト中の場合はフィクスチャ)にない場合は早期に失敗させたいので、これを実装する方法がわかりません。
オブジェクトレベルのキャッシングについても考えていて、PageType.objects.get(type=type)
定数が使用/呼び出されるたびに呼び出すだけですが、それはやり過ぎではないでしょうか。キャッシュなしでormを呼び出すと、db呼び出しが多すぎて、防止したいと思います。
とてもシンプルなものに違いありませんが、うまくいきません。;-)