私は現在、Djangoのアプリ(+ RESTフレームワーク)のためのいくつかのテストを足すと、データベースにテストデータをロードするいくつかの問題を抱えているをロードする前に。ジャンゴテスト - データベースにデータをロードするアプリケーション
私はいくつかの(非常に単純化された)コードを説明しましょう:
私のようなものであるDjangoのビューがありますので、基本的に私がする必要がある
view.py
from myapp.models import Item
from myapp.utils import MyClass
# need to initialize with the set of items
item_set = {item.name for item in Item.objects.all()}
my_class_object = MyClass(item_set)
class MyView(APIView):
def post(selfself, request):
result = my_class_object.process(request.data)
return Response(result)
をデータベースからのデータでクラスを初期化してから、このクラスをビューで使用して、エンドポイントが受け取ったデータを処理します。
今テスト:テストを実行する場合
from rest_framework.test import APILiveServerTestCase
from myapp.models import Item
class MyTest(APILiveServerTestCase):
def setUp(self):
self.URL = '/some_url_linking_to_myview/'
# load some data
Item.objects.create(name="first item")
Item.objects.create(name="second item")
def test_myview_return_correct_result(self):
post_data = {"foo"}
response = self.client.post(self.URL,
data=post_data,
format='json')
self.assertEqual(response.status_code, 200)
self.assertEqual(response.data, {"my_expected_result"})
my_test.pyは、何が起こるかは、現在のsetUp()メソッドを取得する前view.pyがロードされていることですこれらの2つの行でクラスをインスタンス化すると、次のようになります。
item_set = {item.name for item in Item.objects.all()}
my_class_object = MyClass(item_set)
データベースはまだ空です。
view.pyが実行される前にデータベースにデータを取得する方法があるか、またはsetUp()の後にアプリを強制的にリロードしたり、クラスを他の場所にインスタンス化したりする方法があるかどうかは疑問ですデータをロードした後に呼び出されますか?
ありがとうございました!
これは、モジュールレベルでのDB-アクセスコードを置くべきではない理由の良いデモです。 –