この質問を読んで時間を無駄にしないでください。以下に回答しました。
私のsettings.pyには次のものが含まれています。
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': 'foo.db',
'TEST_NAME': 'thetest.db'
}
}
テストコードには次の行があります。
allShoes = models.Shoe.objects.filter()
テーブルにはviews.pyが入力されているため、allShoesにはオブジェクトが含まれている必要がありますが、コードでは空です。また、テストコードにset_trace()を挿入して一時停止し、sqlite3プログラムを使用して、foo.dbにtest.dbではなくオブジェクトが含まれていることを確認しました。
モデルクラスShoeをdjango.test.TestCaseとdjango.test.TransactionTestCaseから交互に派生させてみました。どちらも機能しませんでした。
私が使用しているもの:
>>> django.VERSION
(1, 4, 3, 'final', 0)
と
(venv)bmac:ol b$ python
Python 2.7.2 (default, Jun 20 2012, 16:23:33)
[GCC 4.2.1 Compatible Apple Clang 4.0 (tags/Apple/clang-418.0.60)] on darwin
私が間違っていることについて何か考えがありますか?
編集:明確にするために、foo.dbは空であり、テストが実行されてtest.dbが存在しない前に、syncdbによって事前に作成されています。私のテストはSeleniumテストで、ビュー(テスト対象のコードの一部)が呼び出され、ページを2回クリックします。クリックするたびに、別のビューを呼び出すAJAXハンドラーがあります。そのビュー(テスト中のより多くのコード)は、DBにエントリを作成します。したがって、最後に、DBがテストランナーによって破棄される前に、DBを2回クリックする必要があります。
編集:動作に違いは見られませんでしたが、問題を簡単にするためにDATABASESからTEST_NAMEを削除しました。テストの実行中に、ビューコードから次のコマンドを実行できます。
models.Shoe.objects.using('default').all()
オブジェクトを参照してください。ただし、私のテストルーチンから、同じステートメントで空のリストが生成されます。