Django-Tests – Laden von Daten in die Datenbank vor dem Laden der Apps
Posted: 24 Dec 2024, 10:40
Ich schreibe derzeit einige Tests für eine Django-App (+ REST-Framework) und habe einige Probleme beim Laden der Testdaten in die Datenbank.
Lassen Sie es mich erklären mit etwas (sehr vereinfachtem) Code:
Ich habe eine Django-Ansicht, die etwa so aussieht:
view.py
Im Grunde muss ich also eine Klasse mit einigen Daten aus der Datenbank initialisieren und diese Klasse dann meiner Ansicht nach verwenden, um die vom Endpunkt empfangenen Daten zu verarbeiten.
Jetzt der Test:
my_test.py
Beim Ausführen des Tests passiert derzeit, dass view.py vor der Methode setUp() geladen wird ausgeführt werden, also wenn ich die Klasse mit diesen beiden Zeilen instanziiere:
Die Datenbank ist noch leer.
Ich frage mich, ob es eine Möglichkeit gibt, die Daten abzurufen in die Datenbank einfügen, bevor view.py ausgeführt wird, oder vielleicht irgendwie das Neuladen der App nach setUp() erzwingen, oder meine Klasse woanders instanziieren, damit sie nach dem Laden der Daten aufgerufen wird?
Danke!
Lassen Sie es mich erklären mit etwas (sehr vereinfachtem) Code:
Ich habe eine Django-Ansicht, die etwa so aussieht:
view.py
Code: Select all
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)
Jetzt der Test:
my_test.py
Code: Select all
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"})
Code: Select all
item_set = {item.name for item in Item.objects.all()}
my_class_object = MyClass(item_set)
Ich frage mich, ob es eine Möglichkeit gibt, die Daten abzurufen in die Datenbank einfügen, bevor view.py ausgeführt wird, oder vielleicht irgendwie das Neuladen der App nach setUp() erzwingen, oder meine Klasse woanders instanziieren, damit sie nach dem Laden der Daten aufgerufen wird?
Danke!