In meinem Projekt coach habe ich ein Problem beim Testen der Information Serializer. Ich habe folgende Serializer Klassen in der Datei running/serializes.py
:Django Rest Framework: Testen Sie die Serialisierer
class Velocity(serializers.ModelSerializer):
class Meta:
model = VelocityModel
fields = ("id", "minimum", "average", "maximum")
class Information(serializers.ModelSerializer):
heart_beat = HeartBeat(read_only=True)
velocity = Velocity(read_only=True)
class Meta:
model = InformationModel
fields = ("id", "distance", "velocity", "heart_beat", "calories")
In meinem Test habe ich dies:
from running import models, serializers
@patch("running.serializers.Velocity")
def test_contains_id(self, mock_velocity):
# mocking stuff
returned_data = {}
mock_velocity.data = PropertyMock(return_value=returned_data)
# creating instances of the models
self.velocity = models.Velocity(minimum=8, average=10, maximum=12)
self.velocity.save()
self.heart_beat = models.HeartBeat(minimum=120, average=130, maximum=140)
self.heart_beat.save()
self.information = models.Information(distance=3.7, velocity=self.velocity, heart_beat=self.heart_beat, calories=132)
self.information.save()
# create the actual serializer
self.information_serializer = serializers.Information(self.information)
self.assertEqual(self.information_serializer.data["velocity"], returned_data)
Deshalb möchte ich testen, dass die Daten von der InformationSerializer (self.information_serializer.data
) zurückgegeben hat Ein Schlüssel "velocity"
, der auf die vom VelocitySerializer zurückgegebenen Daten zeigt (mock_velocity.data
).
Aber self.information_serializer.data["velocity"]
enthält nur die Daten, in den Modellen gespeichert (OrderedDict([('id', 1), ('minimum', 8.0), ('average', 10.0), ('maximum', 12.0)])
. Ich weiß nicht, wo meine Schuld ...
Auch eine andere Frage wäre, dies tun müssen teste ich, weil ich wirklich? ‚ich ist in Frage, wenn ich mehr die Django Ruhe Rahmen testen bin als meine Serializer ?!
So wie es weitergehen? Vielen Dank im Voraus!
Sie müssen nicht jeden normalen Serialisierer testen, ich würde lieber den gesamten API-Endpunkt testen, der mit der Methode self.client. [HTTP_METHOD] (url, data = data) erreicht werden kann. Überprüfen Sie dies: https://docs.djangoproject.com/en/1.10/topics/testing/tools/ –
Vielen Dank für Ihren Gedanken. Also denke ich über diesen Ansatz nach: 1) Testen der API wie folgt: "Nach der Anforderung" DELETE/running/run/1 "sollte kein Run-Modell mit der ID 1 mehr existieren." 2) und Unit-Tests meine eigenen kleinen Klassen/Methoden/Eigenschaften wie "' self.assertEqual (person.name, "Peter") '" Was denken Sie (@Taras) darüber? –
Yeap, das klingt viel besser. Bitte denken Sie daran, dass Sie Django oder DRF nicht testen. Wenn Ihre CRUD-Aktionen also Standard sind, müssen Sie das auch nicht testen. Nur Ihre benutzerdefinierte und geschäftliche Logik muss getestet werden. –