Django=の単体テストの作成を開始しようとしています。フィクスチャについていくつか質問があります。
プロジェクトdb全体(特定のアプリケーションではない)のフィクスチャを作成し、特定のアプリのフィクスチャのみをロードするだけでは十分ではないように見えるため、テストごとにロードしたいと思います。
フィクスチャを/proj_folder/fixtures/proj_fixture.jsonに保存したいのですが。
Settings.pyでFIXTURE_DIRS = ('/fixtures/',)
を設定しました。それから私のテストケースで私は試しています
fixtures = ['proj_fixture.json']
しかし、フィクスチャが読み込まれません。これをどのように解決できますか?フィクスチャを検索する場所を追加するにはどうすればよいですか?一般に、各アプリのテストごとにtest_db全体のフィクスチャをロードしても問題ありませんか(かなり小さい場合)?ありがとう!
本当にフォルダはありますか/fixtures/
ハードディスクにありますか?
あなたはおそらく使用するつもりでした:
FIXTURE_DIRS = ('/path/to/proj_folder/fixtures/',)
次のように、TestCaseでプロジェクトルートに対する相対パスを指定しました。
from Django.test import TestCase
class MyTestCase(TestCase):
fixtures = ['/myapp/fixtures/dump.json',]
...
そして、それはFIXTURE_DIRS
を使わなくても機能しました
Settings.pyでPROJECT_ROOT変数を使用することをお勧めします。
import os.path
PROJECT_ROOT = os.path.dirname(os.path.realpath(__file__))
FIXTURE_DIRS = (os.path.join(PROJECT_ROOT, 'fixtures'),)
Fixuresフォルダーを作成してフィクスチャーを(すべてのアプリに)配置するのではなく、これを処理するためのより適切で適切な方法は、プロジェクトレベルですべてのフィクスチャーを1つのフォルダーに配置してロードすることです。
from Django.core.management import call_command
class TestMachin(TestCase):
def setUp(self):
# Load fixtures
call_command('loaddata', 'fixtures/myfixture', verbosity=0)
call_command
を呼び出すことは、次を実行することと同じです。
manage.py loaddata /path/to/fixtures
私はこれをしました、そしてパス参照を与える必要はありませんでした、フィクスチャファイル名は私にとって十分でした。
class SomeTest(TestCase):
fixtures = ('myfixture.json',)
フィクスチャがあるかどうか、またはデータを入力するためのPythonコードのセットがあるかどうかによって、2つのオプションがあります。
フィクスチャの場合は、この質問の an answer に示すように、cls.fixtures
を使用します。
class MyTestCase(Django.test.TestCase):
fixtures = ['/myapp/fixtures/dump.json',]
Pythonの場合、cls.setUpTestData
を使用します。
class MyTestCase(Django.test.TestCase):
@classmethod
def setUpTestData(cls):
cls.create_fixture() # create_fixture is a custom function
setUpTestData
はTestCase.setUpClass
によって呼び出されます。
両方を使用できます。この場合、フィクスチャのロード後にsetUpTestData
が呼び出されるため、フィクスチャが最初にロードされます。
インポートする必要がありますfrom Django.test import TestCase
およびNOT from unittest import TestCase
。これで問題が解決しました。
setUpClass
メソッドをオーバーライドした場合は、メソッドの最初の行としてsuper().setUpClass()
メソッドを呼び出すようにしてください。フィクスチャをロードするコードはTestCaseクラスにあります。